본문 바로가기
파이썬알고리즘

백준 2470 두 용액 (파이썬)

by zho 2024. 8. 28.

https://www.acmicpc.net/problem/2470

 

문제핵심

1. 음수 양수 상관없이 가까운 값을 찾는 것이기 때문에 절댓값을 이용해야겠다는 아이디어

2. 정렬 후 왼쪽 끝과 오른쪽 끝을 정해두고 while left < right: 조건 내 순환하며 답을 찾을 수 있도록 한다 (투포인터 알고리즘)

 

1. 2e+9는 2 x 10^9를 나타낸다

2. answer = [1, 2]와 같이 list로 되어있는 경우 *answer처럼 앞에 *(Asterisk)를 붙이면 괄호 안 내용은 1, 2로 출력된다.

 

풀이

n = int(input())
water = list(map(int, input().split()))
water.sort() 

left = 0
right = n - 1
min_sum = 2e+9+1
answer = [0, 0]

while left < right:
    curr_sum = water[left] + water[right]
    
    if abs(curr_sum) < min_sum:
        min_sum = abs(curr_sum)
        answer[0] = water[left]
        answer[1] = water[right]
    
    if curr_sum < 0:
        left += 1
    else:
        right -= 1

print(*sorted(answer))
728x90