백준[2470] - 두 용액

문제

백준 2470 문제 보기

접근 방법

처음에는 문제를 풀기위한 접근 방법을 생각하기 쉽지않았다. 입력된 숫자중 2개를 조합해여 0에 가장 가깝게 출력해야했다. 즉, 음수 또는 양수에 상관없이 0에만 가까우면 된다.
그래서 생각해낸 방법이 정렬을 할때 음수와 양수를 고려하지 않고 정렬을 한뒤, 이웃한 숫자끼리 빼서 가장 작은 절대값을 출력하면 되지않을까 생각했다.

코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int N;
vector arr;
int temp, minA = 987654321, minB = 987654321;
long long ans = 3000000000;

bool compare(long long a, long long b) {
    return abs(a) < abs(b);
}

int main() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> temp;
        arr.push_back(temp);
    }

    // 절대값을 기준으로 오름차순 정렬
    sort(arr.begin(), arr.end(), compare);

    for (int i = 0; i < N - 1; i++) {
        // 이웃한 숫자가 최소라면
        if (abs(arr[i] + arr[i + 1]) < ans) {
            ans = abs(arr[i] + arr[i + 1]);
            minA = arr[i];
            minB = arr[i + 1];
        }
    }

    if (minA < minB)
        cout << minA << " " << minB;
    else
        cout << minB << " " << minA;

    return 0;
}
Share