Koala - 19기/코딩테스트 심화 스터디
[BOJ/C++] 3273번: 두 수의 합
kim2001sh
2025. 7. 6. 23:56
문제
풀이
정렬 후 투 포인터 사용 등의 간단한 O(nlgn) 풀이들도 존재한다. (STL은 사기이다!)
필자는 O(n)풀이로, 들어오는 숫자를 인덱스로 배열을 증가시키고, 배열에 짝이 맞으면 cnt를 증가시키는 식으로 구현하였다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int cnt = 0, n, x, arr[1000010];
fill(arr, arr + 1000010, 0);
cin >> n;
while (n--) {
cin >> x;
arr[x]++;
}
cin >> x;
for (int i = 1; i < 1000001; i++) {
if (arr[i] == 1 && (x - i) >= 1 && (x - i) <= 1000000 && arr[x - i] == 1 && (x - i != i)) {
cnt++;
arr[i]--;
arr[x - i]--;
}
}
cout << cnt;
}