투 포인터를 이용한 문제.
현재 입력 값의 최대, 최소를 시작으로 두 용액을 더했을 때, 기존의 특성 값보다 작은 경우, 현재의 과 을 업데이트 한다.
입력값의 숫자들은 오름차순으로 들어온다. 이고 인 경우 이 커질수록 값은 더 커지고, 이 작아질수록 값은 더 작아진다.
만약 현재 특성 값이 0 보다 큰 경우라면 을 줄여주고, 현재 특성 값이 0 보다 작은 경우라면, 값을 높여주면서 탐색을 한다.
#include <bits/stdc++.h>
using namespace std;
vector<int> arr;
int N, tmp, l, r, sum, ansL, ansR;
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> tmp;
arr.push_back(tmp);
}
l = ansL = 0;
r = ansR = N - 1;
sum = abs(arr[l] + arr[r]);
while (l < r) {
int mid = arr[l] + arr[r];
if (sum > abs(mid)) {
sum = abs(mid);
ansL = l;
ansR = r;
}
if (mid < 0) l++;
else r--;
}
cout << arr[ansL] << " " << arr[ansR];
}