이번 문제는 살짝 헤맸다..
먼저 어떤 식으로 풀어갈지 생각을 하고나서 풀었어야 했는데
너무 무턱대고 문제부터 풀어서 생각이 잠시 멈췄나보다..ㅎ
어찌어찌 책을 참고하며 풀었다.
일단 이번 문제도 투 포인터 방식으로 푸는 문제였다.
먼저 주어진 숫자를 배열에 넣은 뒤 오름차순 정렬을 해주는 것부터가 시작이다.
그리고 반복문을 돌며 배열에서 하나의 값을 찾아낸 뒤
투 포인터로 두 숫자의 합과 같은 것을 고르면 된다.
여기서 중요한 점은 투 포인터에 해당하는 인덱스가 처음 고른 인덱스와 같으면
서로 다른 두 수의 합이 아니므로 주의해야한다.
필자는 여기서 헤맸다..ㅎㅎ
아래 코드를 한번 보자
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] numArr = new int[N];
for(int i = 0; i < N; i++) {
numArr[i] = Integer.parseInt(st.nextToken());
}
int count = 0;
Arrays.sort(numArr);
for(int k = 0; k < N; k++) {
int i = 0;
int j = N - 1;
int found = numArr[k];
while(i < j) {
if(numArr[i] + numArr[j] < found) {
i++;
} else if(numArr[i] + numArr[j] > found) {
j--;
} else {
if(i != k && j != k) {
count++;
break;
} else if(i == k) {
i++;
} else {
j--;
}
}
}
}
System.out.println(count);
}
}