백준 2467 용액 (C++)

안유태·2022년 12월 8일
0

알고리즘

목록 보기
91/239

2467번: 용액

투포인터를 이용한 문제이다. 입력 값을 받을 때 정렬된 형태로 값을 받기 때문에 따로 정렬을 해 주지 않고 투포인터를 해주었다. 투포인터를 통해 절댓값이 최소가 되는 위치를 찾은 후 출력해주었다.
이전에 풀어본 문제와 유사했기 때문에 금방 풀 수 있었다.



#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int N;
vector<int> v;

void solution() {
    int start = 0, end = N - 1, a, b;
    int sum = 2000000000;

    while (start < end) {
        int tmp = v[start] + v[end];

        if (sum > abs(tmp)) {
            sum = abs(tmp);
            a = start;
            b = end;

            if (sum == 0) break;
        }

        if (tmp < 0) {
            start++;
        }
        else {
            end--;
        }
    }

    cout << v[a] << " " << v[b] << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    cin >> N;

    for (int i = 0; i < N; i++) {
        int a;
        cin >> a;
        v.push_back(a);
    }

    solution();

    return 0;
}
profile
공부하는 개발자

0개의 댓글