코학다식

[백준/BOJ/C언어] 2470번 :: 두 용액 본문

Algorithm/Problem

[백준/BOJ/C언어] 2470번 :: 두 용액

copeng 2019. 9. 25. 23:53

문제 링크

 

 

 

Solution


 

처음에는 양수 배열과 음수 배열로 나누어서 이분 탐색을 실행하는 걸 고민해 봤는데, 번거로운 것 같고 다른 방법이 있을 것 같아 다른 방법을 찾다 절댓값으로 정렬해서 이웃한 두 수를 더하는 방법을 사용했다. 이 방법을 사용하면 모두 양수인 경우, 모두 음수인 경우도 쉽게 해결할 수 있다. 대충 봤을 때 값이 꽤 커 보이기에 모든 변수를 long long으로 선언해 줬다. +) C++의 sort 함수는 정말 자주 유용하게 쓰이는 것 같다.

 

 

 

code


 

#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

vector <long long> ans;

bool cmp (const long long a, const long long b) {
    if (abs(a) == abs(b))
        return a < b;
    else
        return abs(a) < abs(b);
}


int main() {

    int N;
    long long in;
    scanf("%d", &N);

    for (int i = 0; i < N; i++) {
        scanf("%lld", &in);
        ans.push_back(in);
    }
    sort(ans.begin(), ans.end(), cmp);

    long long min = 2100000000;
    long long ans1, ans2;
    for (int i = 0; i < N-1; i++) {
        long long sum = ans[i] + ans[i + 1];
        if (min > abs(sum)) {
            min = abs(sum);
            ans1 = ans[i];
            ans2 = ans[i + 1];
        }
    }

    if (ans1 > ans2)
        printf("%lld %lld", ans2, ans1);
    else
        printf("%lld %lld", ans1, ans2);

    return 0;
}

 

Comments