기타/백준일지

[백준] 2470번 두 용액

민지기il 2025. 1. 18. 10:38
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define INF 2000000001
typedef long long ll;
using namespace std;

// 투포인터
int main(){
    fastio;
    int n; cin>>n;
    vector<int> v(n);
    for(int i=0; i<n; i++){
        cin>>v[i];
    }
    sort(v.begin(), v.end());
    int minValue =INF;
    
    int left = 0, right=n-1;
    int minLeft = 0;
    int minRight = 0;
    
    while(left != right){
        int sum = v[left]+v[right];
        
        if(minValue > abs(sum))
        {
            minValue = abs(sum);
            minLeft = v[left];
            minRight = v[right];
        }
        if(sum>0)
            right--;
        else
            left++;
    }
    cout<<minLeft<<' '<<minRight;
    return 0;
}

 

<풀이>

참고 사이트: https://velog.io/@ooo1324/%EB%B0%B1%EC%A4%80-2470%EB%B2%88-%EB%91%90-%EC%9A%A9%EC%95%A1-C

 

벡터에 입력받아 오름차순으로 정렬하고 left / right 포인터를 움직여서 0에 가깝게 이동시킨다.

 

#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;

int main(){
    int N; cin>>N;
    vector <int> liq(N);
    for(int i=0; i<N; i++){
        cin>>liq[i];
    }
    int ans1, ans2;
    int INF=2e9;
    for(int i=0; i<N-1; i++){
        for(int j=i+1; j<N; j++){
            int sum=liq[i]+liq[j];
            if(abs(sum)<INF){
                INF=abs(sum);
                ans1=liq[i];
                ans2=liq[j];
            }
        }
    }
    if(ans1>ans2) swap(ans1, ans2);
    cout<<ans1<<" "<<ans2<<endl;
    return 0;
}

 

이렇게 하면 시간초과가 난다..