본문 바로가기
Algorithm/BOJ

[백준] 2470번 - 두 용액 (파이썬)

by _temp 2022. 3. 10.

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

# 두 용액
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
arr.sort()

result = []
min_result = sys.maxsize

sum = 0
left = 0
right = N-1
while left < right:
    sum = arr[left] + arr[right]
    if abs(sum) < min_result:
        min_result = abs(sum)
        result = [arr[left], arr[right]]
    if sum < 0:
        left += 1
    elif sum > 0:
        right -= 1
    else:
        break
    sum = 0

print(*result)

 

투포인터

1. 정렬을 하고, 투 포인터를 양쪽 끝 인덱스 값에 놓는다.

    - 두 용액의 값이 가장 작은 값으로 min_result를 업데이트, 결과 저장

    - 음수이면, left += 1 (정렬을 했으니 값이 증가)

    - 양수이면, right -= 1 (정렬을 했으니 값이 감소)

    - 0이면, 최솟값이니 break

2. 결과 출력