백준
1253번 (gold 4)
이야기prog
2025. 1. 12. 23:56
https://www.acmicpc.net/problem/1253
투포인터를 사용한 문제이다. 문제의 난이도는 알고리즘의 난이도라기 보다는 데이터 갯수에 의한 알고리즘 판단과 예외처리 때문에 난이도가 골드인 것 같다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
long arr[2000] = {};
for (int i = 0; i < N; ++i) {
cin >> arr[i];
}
sort(arr, arr + N);
int count = 0;
for (int i = 0; i < N; ++i) {
int start = 0, end = N - 1;
while (end > start) {
if (arr[i] == arr[end] + arr[start]) {
if (start != i && end != i) {
count++;
break;
}
else if (start == i) {
start++;
}
else
end--;
//cout << "arr[" << i << "]: " << arr[i] << " " << end << " " << start << "\n";
}
else if (arr[i] > arr[end] + arr[start]) start++;
else end--;
}
}
cout << count;
return 0;
}
서로 다른 수의 합이 N이 되면 좋은 수라고 판단하는데 서로 다른 수 중에 자기 자신이 포함되면 안된다는 예외를 처리해야한다.
0 + n = n 상황은 이 문제에서 원치않는 답으로 보임.