정리
백준 2470번: 두 용액 본문
백준 2470번: 두 용액

- 리스트에 용액들의 특성값을 입력합니다.
- 리스트를 오름차순으로 정렬합니다.
- left = 0, right = N - 1로 설정하고 이분탐색을 위해 left < right 일 때까지 while문을 반복합니다.
i ) 두 용액의 특성값의 합이 0인 경우
- while문을 break하고 결과를 출력합니다.
ii) 두 용액의 특성값의 합이 음수인 경우
- 음의 특성값의 절댓값이 양의 특성값의 절댓값보다 크기 때문에 left += 1 을 통해 두 용액의 특성값의 합이 0에 가까워 질 수 있도록 합니다.
iii) 두 용액의 특성값의 합이 양수인 경우
- 양의 특성값의 절댓값이 음의 특성값의 절댓값보다 크기 때문에 right -= 1를 통해 두 용액의 특성값의 합이 0에 가까워질 수 있도록 합니다.
- 만약 두 용액의 특성값의 합의 절댓값이 기존의 answer의 절댓값보다 작은 경우 answer 에 새로운 값을 입력하고 al =left, ar = right 을 통해 index를 저장해 줍니다. min을 사용하게 되면 -2와 1을 비교했을 때 answer 에 -2 가 입력되고 이는 오답이기 때문에 절댓값을 활용합니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
input = sys.stdin.readline | |
N = int(input()) | |
liquid = [int(x) for x in input().split()] | |
liquid.sort() | |
left = 0 | |
right = N - 1 | |
answer = liquid[left] + liquid[right] | |
al = left | |
ar = right | |
while left < right: | |
tmp = liquid[left] + liquid[right] | |
if abs(tmp) < abs(answer): | |
answer = tmp | |
al = left | |
ar = right | |
if answer == 0: | |
break | |
if tmp < 0: | |
left += 1 | |
else: | |
right -= 1 | |
print(liquid[al], liquid[ar]) |
'Programming > 백준 BOJ' 카테고리의 다른 글
백준 1461번: 도서관 (0) | 2020.09.28 |
---|---|
백준 2473번: 세 용액 (0) | 2020.09.21 |
백준 1946번: 신입 사원 (0) | 2020.09.03 |
백준 2217번: 로프 (0) | 2020.09.03 |
백준 3079번: 입국심사 (0) | 2020.09.01 |
Comments