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]])
0 댓글