https://www.acmicpc.net/problem/2470
정렬의 특성을 활용해 좀 특이하게(?) 풀었다.
플러스/마이너스와 상관없이 정렬하면, 양 옆의 두 가지 합들 중 하난 무조건 0에 가까운 용액이 나온다는 점을 활용했다.
문제의 예시대로라면 아래와 같이 정렬하는 것이다 :
-1 -2 4 98 -99
이렇게 두가지 합 중 절댓값이 가장 작은 걸 찾아 diff 값을 갱신했다.
산성 + 산성, 알칼리 + 알칼리도 가능하다는 점을 고려해 diff 값을 최대값(1,000,000,000) * 2 보다 크게 설정하는 걸 잊지 말자.
import sys
input = sys.stdin.readline
n = int(input())
data = list(map(int, input().split()))
data = sorted(data, key=lambda x: abs(x))
diff = int(1e20)
res = []
for i in range(1, len(data)):
cur = data[i - 1] + data[i]
if abs(cur) < diff:
diff = abs(cur)
res = [data[i - 1], data[i]]
res.sort()
print(*res, sep=' ')