오늘의 알고리즘

[C++] 백준 2473 세 용액

하늘하늘 . 2022. 11. 29. 22:51
 
#include <iostream>
#include <algorithm>
#include <math.h>
 
long long arr[5001] = {};
long long ans[3] = {};
 
int main() 
{
    int N = 0;
    long long result = 3000000001;
    std::cin >> N;
 
    for (int i = 0; i < N; ++i)
    {
        std::cin >> arr[i];
    }
 
    std::sort(arr, arr + N);
 
    for (int i = 0; i < N; ++i) 
    {
        int left = i + 1;
        int right = N - 1;
 
        while (left < right) 
        {
            long long val = arr[i] + arr[left] + arr[right];
 
            if (abs(val) < result) 
            {
                result = abs(val);
                ans[0] = arr[i];
                ans[1] = arr[left];
                ans[2] = arr[right];
            }
 
            if (val < 0) 
                ++left;
 
            else 
                --right;
        }
    }
 
    for (int i = 0; i < 3; ++i)
    {
        std::cout << ans[i] << " ";
    }
 
    return 0;
}
 

이분 탐색입니다.

세 개로 만들어야하기 때문에 한가지는 고정하고 하면 된다...! 는 문제였습니다.

저기까지 생각은 정말... 쉽지 않네요...