티스토리 뷰

문제풀이

백준 2470 G5 두용액 (투포인터)

수박수박좋다 2021. 9. 26. 02:19
반응형

문제출처

생각

0에 가까운 두 수의 합을 구해 각 수를 구하는 문제

주어진 리스트를 오름차순으로 정렬한 다음 양 끝에서 투포인터로 계산한다.

0에 가까운 값을 찾는 것이므로 두 수의 합을 절대값으로 변환하여 최소값을 찾는다.

코드

import sys

N = int(input())
min_val = sys.maxsize
lst = list(map(int, input().split()))

lst.sort()

start = 0
end = len(lst) - 1
al = 0
san = 0

while start < end:
    part_sum = lst[start] + lst[end]
    if abs(part_sum) < min_val:
        al = lst[start]
        san = lst[end]
        min_val = abs(part_sum)
    if part_sum > 0:
        end -= 1
    elif part_sum == 0:
        al = lst[start]
        san = lst[end]
        break
    else:  # 0보다 작을 때
        start += 1
ans = sorted([al, san])
print(ans[0], ans[1])
반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
농담곰의 고군분투 개발기