문제링크 : https://www.acmicpc.net/problem/2467
투포인터 알고리즘을 이용하면 쉽게 풀 수 있는 문제였다.
오름차순으로 정렬된 배열에 양쪽에서 조여오면서, 두 개의 합이 0에 가장 가까운 경우를 저장해서 출력하였다.
#include <iostream>
using namespace std;
int map[100001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int a;
cin >> a;
int left = 1;
int right = a;
int mins = 2147483647;
int lefta;
int righta;
for (int i = 1; i <= a; i++)
{
cin >> map[i];
}
while (left < right)
{
int sum = (map[left] + map[right]);
if (abs(sum) < mins)
{
mins = abs(sum);
lefta = map[left];
righta = map[right];
}
if (sum < 0)
{
left++;
}
else
{
right--;
}
}
cout << lefta << " " << righta;
return 0;
}