문제 링크 : 백준 2467번
하나 하나씩 탐색하면 n<=100,000 이므로 시간초과가 발생하게 된다.
따라서 나는 투 포인터를 이용해 접근했다.
(문제에서 이미 정렬해서 주기 때문에 따로 정렬할 필요는 없다)
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int arr[100001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i=1 ; i<=n ; i++) {
cin >> arr[i];
}
int ans = 2000000001;
int start = 1, end = n;
int first, second;
while(start<end) {
int now = arr[start] + arr[end];
int num = abs(now);
if(ans>num) {
ans = num;
first = arr[start], second = arr[end];
}
if(now>0) end--;
else start++;
}
cout << first << " " << second;
return 0;
}