코딩테스트/백준
[백준-자바] 1253번 좋다 / 2022.05.23
강원대목동녀
2022. 5. 23. 18:45
https://www.acmicpc.net/problem/1253
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)));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int [] num = new int[N]; // 수를 저장할 배열
for(int i=0; i<N; i++){ // 수 입력
num[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(num); // 수 정렬
int count = 0; // 좋은 수의 개수
for(int index=0; index<N; index++){
int find = num[index]; // 내가 찾는 값
int i = 0; // 두 개의 포인터 사용
int j = N-1; // i는 맨 처음부터 j는 마지막 배열부터
while(i<j){ // i가 j보다 이전 배열 일때까지 반복
if(num[i]+num[j]==find){ // 두 개의 포인터의 합이 내가 찾는 값과 일치할 때
if(i!=index&&j!=index){ // 두 개의 배열 인덱스가 찾고자 하는 배열 인덱스와는 달라야 함
count++; // 좋은 수 + 1
break; // 다음 배열(index+1)로 이동
} else if(i==index){ // i값이 index값과 같다면 i + 1
i++;
} else if(j==index){ // j값이 index값과 같다면 j - 1
j--;
}
} else if(num[i]+num[j]<find){ // 두 개의 포인터의 합이 내가 찾는 값보다 작을 때
i++; // 더 큰 수로 포인터 이동
} else { // 두 개의 포인터의 합이 내가 찾는 값보다 클 때
j--; // 더 작은 수로 포인터 이동
}
}
}
System.out.println(count); // 좋은 수의 개수
}
}
풀이 :