728x90
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
투포인터를 사용해 풀 수 있는 문제입니다.
import sys
def solution(N, data_list):
# 데이터 정렬
data_list = sorted(data_list)
# 투포인터
left = 0
right = N-1
# 비교 값
value = int(2e9)
# 포인터 값
left_value = data_list[left]
right_value = data_list[right]
# 탐색
while True:
# 합
sum_value = data_list[left] + data_list[right]
# value 를 비교해 value, left_value, right_value 를 최신화
if abs(sum_value) < value:
value = abs(sum_value)
left_value = data_list[left]
right_value = data_list[right]
# 포인터 이동
# 0 보다 크면 합이 작아져야 하므로 right 이동
if sum_value > 0:
right -= 1
# 0 보다 작으면 left 이동
elif sum_value < 0:
left += 1
# 포인터가 겹치거나 합이 0이면 끝
if left >= right or value == 0:
print(f'{left_value} {right_value}')
return
N = int(sys.stdin.readline().strip())
data_list = list(map(int, sys.stdin.readline().strip().split()))
solution(N, data_list)
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 9372 <상근이의 여행> Python (0) | 2023.12.13 |
---|---|
백준 1976 <여행 가자> Python (0) | 2023.12.12 |
백준 1956 <운동> Python (0) | 2023.12.10 |
백준 11404 <플로이드> Python (2) | 2023.12.10 |
백준 11657 <타임머신> Python (1) | 2023.12.08 |