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;
}