백준 2467번과 같은 똑같은 문제다. 용액 하나를 더 쓰는 차이인데 입력의 수가 5000개 밖에 되지 않기 때문에 이중 반복문과 두 포인터를 사용하면 된다.
N = int(input())
sol = list(map(int, input().split()))
sol.sort() # 두 포인터로 순서대로 찾기 위해 용액 정렬
def find_best(): # 합이 0인 경우 바로 반복문 종료를 위해 함수로 선언
best_sol = 10**12
best_sol_lst = []
for i in range(N-2): # 처음 고르는 용액은 0 번째부터 마지막에서 두 번째까지
start, end = i+1, N-1 # 나머지 두 용액은 i+1 번째부터 마지막까지 탐색
while start < end: # 같은 용액이 포함되면 안되므로 등호는 빼줘야한다
mixture = sol[start] + sol[end] + sol[i] # 세 용액의 특성값 합
if abs(mixture) < best_sol: # 기존값보다 합이 0에 더 가깝다면
best_sol = abs(mixture) # 값 업데이트
best_sol_lst = [sol[start], sol[end], sol[i]] 최저 용액 조합 저장
if mixture > 0: # 합이 0보다 크다면
end -= 1 # 마지막 인덱스를 줄여 특성값 합 낮추기
elif mixture < 0: # 작다면
start += 1 # 반대로 높이기
else: # 0이 된다면 바로 종료
return best_sol_lst
else: 가장 낮은 값이 나오는 용액 조합 반환
return best_sol_lst
ans = find_best()
ans.sort()
print(*ans)