:pencil2:코드

import sys
# sys.stdin = open("input.txt")
input = sys.stdin.readline


n = int(input())
arr = list(map(int, input().split()))

arr.sort()
start = 0
end = n - 1
minSum = 2 * int(1e9)
a, b = -1, -1
while start < end:
    result = arr[start] + arr[end]
    if result == 0:
        a = start
        b = end 
        break

    # 차이가 작으면 되므로 절대값으로
    if minSum > abs(result):
        minSum = abs(result)
        a = start
        b = end
    if result < 0:
        start += 1
    if result > 0:
        end -= 1

print(arr[a], arr[b])

:star:풀이

양 끝 두점을 시작과 끝나는 점으로 해서 투포인트로 풀었다.

일단 크기순으로 정렬을 해준 뒤에 합이 0이면 바로 출력을 해주고 합이 0이 아니고 절대값이 현재 차이가 제일 작은 값보다 작다면 최소값을 갱신해준다.

만약 합이 음수이면 크기를 더 키워야 하므로 왼쪽에서 이동시켜주고 합이 양수이면 크기를 작게 만들어 줘야하므로 오른쪽에서 이동시켜준다.

댓글남기기