https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
문제
입력 값으로 N개의 숫자들이 주어지는데 하나의 수가 자신을 제외한 2개의 수의 합으로 나타낸다면 '좋다'라고 합니다.
예를들어 입력값인 1 2 3 4 5 6 7 8 9 10 중 3은 1+2, 4는 1+3과 같은 경우입니다.
문제풀이
예제에는 보기 좋게 숫자가 정렬되어 나오지만 다른 케이스에서도 편한 계산을 위해 배열의 값을 정렬해줍니다.
이 문제는 투포인터를 사용하여 풀이했고 몇 가지 주의해야할 점이 있습니다.
1. 같은 값이 입력값으로 들어올 수 있다.
2. 자기 자신을 좋은 수 만들기에 포함하면 안된다.
저의 경우는 1번 케이스를 생각하지 않고 배열의 1,2 번 값은 필요 없는 값으로 생각해서 한 차례 틀렸습니다.
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 arr[] = new int [N];
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 sIndex = 0;
int eIndex = N-1;
while(sIndex != eIndex) {
if( arr[sIndex]+arr[eIndex] == arr[i]) {
if(sIndex != i && eIndex != i) {
count++;
break;
}else if (sIndex==i) {
sIndex++;
}else if (eIndex==i) {
eIndex--;
}
}else if( arr[sIndex]+arr[eIndex] > arr[i]) {
eIndex--;
}else {
sIndex++;
}
}
}
System.out.println(count);
}
}
'백준' 카테고리의 다른 글
[JAVA] 백준 1940 주몽 (0) | 2024.05.30 |
---|---|
[JAVA] 백준 2018 수들의 합 5 (0) | 2024.05.30 |