결론: 수열에서 합이 0과 가장 가까운 두 수를 찾아라.
음수와 양수가 존재할 수 있는 정렬된 수열에서 합을 구하므로 양쪽 끝에서부터 합을 구해본다.
📌 같은 경우가 두 개 이상일 경우 그 중 아무것이나 하나를 출력한다고 했다.
즉, 양쪽 끝에서부터 탐색하다가 0이 되는 순간에는 바로 값을 확정해도 된다!
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n;
int solution[100001];
cin >> n;
for(int i = 0; i < n; i++) cin >> solution[i];
long long left = 0;
long long right = n - 1;
int min = abs(solution[left] + solution[right]);
int minL = solution[left];
int minR = solution[right];
while(left < right){
int value = solution[left] + solution[right];
if (abs(value) < min) {
min = abs(value);
minL = solution[left];
minR = solution[right];
}
if(value > 0) right--;
else if (value < 0) left++;
else break;
}
cout << minL << " " << minR;
return 0;
}