투포인터를 이용한 문제이다. 입력 값을 받을 때 정렬된 형태로 값을 받기 때문에 따로 정렬을 해 주지 않고 투포인터를 해주었다. 투포인터를 통해 절댓값이 최소가 되는 위치를 찾은 후 출력해주었다.
이전에 풀어본 문제와 유사했기 때문에 금방 풀 수 있었다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int N;
vector<int> v;
void solution() {
int start = 0, end = N - 1, a, b;
int sum = 2000000000;
while (start < end) {
int tmp = v[start] + v[end];
if (sum > abs(tmp)) {
sum = abs(tmp);
a = start;
b = end;
if (sum == 0) break;
}
if (tmp < 0) {
start++;
}
else {
end--;
}
}
cout << v[a] << " " << v[b] << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
v.push_back(a);
}
solution();
return 0;
}