본문 바로가기
코딩테스트

[백준] 1253번 '좋다' - Java

by CuckooBird 2023. 8. 1.

https://www.acmicpc.net/problem/1253

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net


문제


코드

import java.io.*;
import java.util.*;

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int[] arr = new int[n];
		for(int i = 0 ; i < n ; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr);
		int cnt = 0;
		for(int i = 0 ; i < n ; i++) {
			int a = 0 , b = n - 1;
			while(a < b) {
				if(arr[i] == arr[a] + arr[b]) {
					if(i == a) a++;
					else if(i == b) b--;
					else {
						cnt ++;
						break;
					}
				}
				else if(arr[i] < arr[a] + arr[b]) b--;
				else a++;
			}
			
		}
		
		bw.write(cnt + "\n");
		
		bf.close();
		bw.flush();
		bw.close();
	}
	
}

투포인터를 이용하여 타겟이 되는 숫자를 찾는 문제였습니다.

음수가 타겟이 될 수도 있고, 투포인터 중 하나가 될 수도 있기에 a = 0 , b = n-1 에서 시작했습니다.