두개의 용액을 더해서 0에 가까운 용액을 만드는 문제이며 투포인터 알고리즘을 사용하면 된다.
주어진 용액이 -2, 4, -99, -1, 98일때 -99, 98을 통해 0에 가까운 용액을 만들 수 있다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, a, b;
cin >> n;
vector<int> V(n);
for (int i = 0; i < n; ++i)
cin >> V[i];
int s = 0, e = n - 1, ans = INT_MAX;
sort(V.begin(), V.end());
while (s < e)
{
int sum = V[s] + V[e];
if (sum > 0)
e--;
else if (sum < 0)
s++;
else
{
e--;
s++;
}
if (ans > abs(sum))
{
ans = abs(sum);
if (sum < 0)
a = V[s - 1], b = V[e];
else if (sum > 0)
a = V[s], b = V[e + 1];
else
a = V[s - 1], b = V[e + 1];
}
}
cout << a << ' ' << b << '\n';
}