2467번: 용액 (acmicpc.net)

##
#Binary Search, #Two-pointer
투포인터 문제인데, 0에 가장 가까운 경우중 어떤 경우도 상관 없으므로 절댓값 처리하고, key값으로 저장한 합친 결과물을 이용해 딕셔너리에서 합친 두 용액을 찾아내자.

이 문제는 이진탐색으로 O(nlogn)에 해결 가능한것으로 보이는데
기준을 잡고, 그 기준과 합이 0에 가까운 다른 용액을 이진탐색으로 찾는다고 한다. 나중에 이 방법으로 해보도록 하자. 잠좀 자고...

##
import sys
input = sys.stdin.read
inp = list(map(lambda x:x.replace('\x1a',''),input().splitlines()))

N = int(inp[0])
l = list(map(int,inp[1].split()))

d = {}

i = 0
j = N-1
while(True):
    if i>=j:
        break

    d[abs(l[i]+l[j])] = [l[i],l[j]]

    if l[i] + l[j] > 0:
        j -= 1
    elif l[i] + l[j] < 0:
        i += 1
    else:
        i+=1
        j-=1
   
l2 = list(d.keys())
l2.sort()
print(*d[l2[0]])