문제 링크 : https://www.acmicpc.net/problem/2473
#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#define endl '\n'
using namespace std;
long long N;
vector<long long> v;
vector<long long> answer(3);
long long minVal = 3000000001;
void input()
{
cin >> N;
for (long long i = 0; i < N; i++)
{
long long num;
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
}
void solve()
{
for (long long i = 0; i <= N - 3; i++)
{
long long left = i + 1;
long long right = N - 1;
while (left < right)
{
long long sum = v[i] + v[left] + v[right];
if (minVal > abs(sum))
{
answer[0] = v[i];
answer[1] = v[left];
answer[2] = v[right];
minVal = abs(sum);
}
if (sum > 0)
--right;
else
++left;
}
}
}
void output()
{
sort(answer.begin(), answer.end());
for (auto i : answer)
cout << i << " ";
cout << endl;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
input();
solve();
output();
return 0;
}
1. 입력 받은 용액을 오름차순 정렬한다.
2. i 번째 용액과 i 번째 용액보다 큰 두 용액의 조합 중 절댓값이 가장 작은 조합을 찾아서 answer에 저장한다. (0 <= i <= N - 3)
3. answer를 정렬하여 오름차순으로 출력한다.
728x90
'Problem Solving' 카테고리의 다른 글
[Problem Solving] BOJ 17144 : 미세먼지 안녕! (0) | 2024.07.08 |
---|---|
[Problem Solving] BOJ 13459, 13460 : 구슬 탈출 1, 2 (0) | 2024.07.07 |
[Problem Solving] BOJ 1389 : 케빈 베이컨의 6단계 법칙 (0) | 2024.07.05 |
[Problem Solving] BOJ 2294 : 동전 2 (0) | 2024.07.04 |
[Problem Solving] BOJ 19236 : 청소년 상어 (0) | 2024.07.02 |