이상한데서 엄청 애먹고 시간초과 뜬 문제다.왜 시간초과 떴는지는 지금도 모르겠다.
시작과 끝에서 시작하는 투포인터 알고리즘으로 풀면 된다.주의할건 ,합하는 수에 자기 자신이 들어가면 안 된다는 것이다.
수가 같아도 위치가 다르면 다른 숫자로 간주한다.그렇기에 반드시 배열 인덱스로 비교해야 한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
String str=br.readLine();
StringTokenizer st = new StringTokenizer(str," ");
for(int i=0;i<N;i++){
arr[i]=Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int count=0;
for(int i=0;i<N;i++){
int start = 0;
int end = N-1;
int find=arr[i];
while(start<end){
if(arr[start]+arr[end]>find){
end--;
}else if(arr[start]+arr[end]<find){
start++;
}else{
// start와 end가 i와 일치하면 안 된다.
if(start!=i && end!=i){
count++;
break;
}else if(start==i){
start++;
}else if(end==i){
end--;
}
}
}
}
bw.write(String.valueOf(count));
bw.flush();
bw.close();
br.close();
}
}