본문 바로가기

백준/실버

[백준 3273번] 두 수의 합

문제의 합 : https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, x;
    vector<int> arr;
    cin >> n;
    for(int i=0; i<n; i++)
    {
        int num;
        cin >> num;
        arr.push_back(num);    
    }
    cin >> x;
    sort(arr.begin(), arr.end());

    int l=0, h = n-1, cnt=0;
    while(l<h)
    {
        int sum = arr[l] + arr[h];
        if (sum == x)  //목표 수일 경우
        {
            cnt++;
            l++;
            h--;
        }
        else if (sum < x) 
        {
            l++;
        }
        else 
        {
            h--;
        }
    }
    cout << cnt;
    return 0;
}

배열의 맨 처음값과 맨 마지막 값의 합을 처음으로 시작

목표 값이면 cnt를 증가시키고 low, high 인덱스를 증가 및 감소

합이 목표값보다 작으면 low 증가, 크면 high 감소