import sys
input = sys.stdin.readline
INF = sys.maxsize
N = int(input())
sol = sorted(list(map(int,input().split())))
result = [INF,False]
for std in range(N-2):
start = std+1
end = N-1
while True:
if start == end:
break
SUM = sol[std] + sol[start] + sol[end]
if abs(SUM) < result[0]:
result[0] = abs(SUM)
result[1] = (sol[std],sol[start],sol[end])
if SUM < 0:
start += 1
else :
end -= 1
print(" ".join(map(str,result[1])))
간단한 투 포인터 문제이다.
이전의 용액 문제는 투 포인터를 안쓰고 heapq를 사용해서 풀었었는데, 이번 문제는 3개를 뽑아야 해서 heapq를 사용하는 방식은 쓸 수 없었다.
그래도 그때 풀었다고 그냥 넘어가지 않고 투 포인터 알고리즘이 뭔지 알아봤기 때문에 쉽게 풀 수 있었다.
오늘의 교훈) 내 방식대로 풀었다고 해도 더 적합한 알고리즘을 공부하자