Compy's Blog
220 words
1 minutes
[BOJ] 두 수의 합
2025-06-19

두 수의 합

TimeLimitMemoryLimitConditionTAG
1s128MB(2 ≤ N ≤ 1’000’000, -10^8 ≤ k ≤ 10^8)Binary Search, Two Pointer

조건에 서로 다른 수들만 들어오기 때문에 성립하구요. 직관적이고 전형적인 바이너리서치 문제여서 금방 풀었습니다.

정답 코드

이거 fastio 없으면 시간초과 납니다. 조심하셔요

#include <iostream>
#include <queue>
#include <set>
#include <algorithm>
#include <random>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

#define MOD 1000000007LL
#define MAX 1'000'000LL
using namespace std;
using ll = long long;


ll nums[1'000'001];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t;
    
    while(t --> 0){
        int n, k;
        cin >> n >> k;
        
        
        for(int i = 0; i < n; i++) cin >> nums[i];
        sort(nums, nums+n);
        
        int left = 0, right = n-1;
        
        ll diff = 1'000'000'000'000;
        ll count = 0;
        
        while(left < right){
            ll sumOfLR = nums[left] + nums[right];
            if(sumOfLR > k)
                right--;
            else
                left++;
            
            if(diff == abs(k - sumOfLR)) count++;
            else if(diff > abs(k - sumOfLR)){
                count = 1;
                diff = abs(k - sumOfLR);
            }
        }
        
        cout << count << "\n";
        
    }
   

    return 0;
}
[BOJ] 두 수의 합
https://compy07.github.io/Blog/posts/boj/9024/
Author
뒹굴뒹굴 이정훈 공부방
Published at
2025-06-19