9024 - 두 수의 합

2025. 2. 18. 14:38PS/백준

문제

https://www.acmicpc.net/problem/9024

느낀점

투 포인터 알고리즘 자체는 어렵지 않았지만, 많은 수의 입력이 들어올 때, 동기화 해주어야했다. 이런 부분이 백준 문제가 짜증나는 듯..

풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    int t;
    cin >> t;
    std::ios::sync_with_stdio(false);
    for (int i = 0; i < t; i++)
    {
        int n, K;
        cin >> n >> K;
        vector<int> arr(n);
        for (int k = 0; k < n; k++)
        {
            cin >> arr[k];
        }
        sort(arr.begin(), arr.end());
        int left = 0, right = n - 1;
        int minValue = 2 * 10e7;
        vector<int> answerList;
        while (left < right)
        {
            int diff = arr[left] + arr[right] - K;
            if (diff == 0)
            {
                left++;
                right--;
            }
            else if (diff > 0)
            {
                right--;
            }
            else
            {
                left++;
            }
            minValue = min(minValue, abs(diff));
            answerList.push_back(abs(diff));
        }
        int cnt = 0;
        for (size_t j = 0; j < answerList.size(); j++)
        {
            if (answerList[j] == minValue)
            {
                cnt++;
            }
        }

        cout << cnt << "\n";
    }

    return 0;
}

'PS > 백준' 카테고리의 다른 글

17609 - 회문  (0) 2025.02.18
14921 - 용액 합성하기  (0) 2025.02.18
19583 - 싸이버개강총회  (0) 2025.02.18
3649 - 로봇 프로젝트  (1) 2025.02.18
2467 - 용액  (0) 2025.02.18