이번 문제는 이분탐색을 통해 해결하였다. l, r 포인터를 양쪽 끝에 두고 시작하였는데, l의 증가와 r의 감소 타이밍을 생각하는 과정에서 시간이 조금 오래 걸렸다. 그러다가 두 포인터가 가리키는 값의 합이 양수일 경우에는 r을 감소시켜 합을 낮추는 방향으로, 두 포인터가 가리키는 값의 합이 음수일 경우에는 l을 증가시켜 합을 높이는 방향으로 구현하였다. 그리고 도중에 두 합이 0인 경우가 있다면, 이보다 더 작은 절댓값을 구할 수 없으므로 바로 while문을 종료시켰다.
import sys
n = int(input())
liquid = sorted(list(map(int, input().split())))
l, r = 0, n-1
answer = [0, 0]
std = sys.maxsize
while l < r:
mix = liquid[l] + liquid[r]
if abs(mix) <= std:
std = abs(mix)
answer = [liquid[l], liquid[r]]
if mix > 0:
r -= 1
elif mix < 0:
l += 1
else:
break
print(*answer)