오늘의 알고리즘
[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;
}
이분 탐색입니다.
세 개로 만들어야하기 때문에 한가지는 고정하고 하면 된다...! 는 문제였습니다.
저기까지 생각은 정말... 쉽지 않네요...