본문 바로가기
알고리즘/투포인터

[백준][Python] 2470번 두 용액

by 임짠짠 2023. 3. 2.
반응형
 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

 

코드

import sys
n = int(input())
n_list = list(map(int,sys.stdin.readline().split()))
start = 0
end = n-1
min_n = 2000000001
n_list.sort()

while start < end:
	num = n_list[end] + n_list[start]
	if num == 0:
		answer = [n_list[start],n_list[end]]
		break
	if abs(num) < min_n:
		answer = [n_list[start],n_list[end]]
		min_n = abs(num)
		
	if num > 0:
		end -= 1
	else:
		start += 1
	
print(*answer)

 

설명

투포인터를 사용하여 푸는 문제이다.

양 끝에서부터 시작해서 두 수를 더한 값의 절댓값이 0이면 바로 while문을 빠져나와 답을 출력하고, 현재 최솟값보다 작으면 answer에 두 수를 저장하고 min_n 값도 갱신했다.

두 수를 더한 값이 양수이면 end-1을 해줬고 음수이면 start+1을 해줬다.

 

반응형

댓글