
알고리즘 분류 : 투포인터
난이도 : 골드4
출처 : 백준 - 좋다


투포인터로 접근하면서 좋은 수의 개수를 확인한다.
이때 '어떤수가 다른 수 두개의 합으로' 라는 말을 주의하자예를 들어 0과 4을 이용해서 4를 만들수 있더라도 4는 좋은 수가 아니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Integer[] array = new Integer[N];
for(int i=0;i<N;i++) {
array[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(array);
int goodCnt = 0;
for(int i=0;i<N;i++) {
int firstPointer = 0, secondPointer = N-1;
while(true) {
if(firstPointer==i)
firstPointer++;
else if(secondPointer==i)
secondPointer--;
if(firstPointer>=secondPointer)
break;
if(array[firstPointer]+array[secondPointer]==array[i]) {
goodCnt++;
break;
}
else if(array[firstPointer]+array[secondPointer]>array[i])
secondPointer--;
else
firstPointer++;
}
}
System.out.println(goodCnt);
}
}

'어떤수가 다른 수 두개의 합으로'라는 말을 간과해서 문제를 푸는데 시간이 많이 소비되었다. 문제를 신중하게 읽자!