PROBLEM/BAEKJOON

[BOJ] 2470 두 용액 | Python

Eunjng 2024. 4. 4. 20:48

문제

백준 2470번 두 용액 | 골드5

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
input = sys.stdin.readline

n = int(input())
lst = sorted(list(map(int, input().split())))
a, b = 0, 0
value = 2000000000

i = 0
j = len(lst) - 1
while j > i:
    tmp = lst[i] + lst[j]
    if abs(tmp) < value:
        value = abs(tmp)
        a, b = lst[i], lst[j]
        if tmp == 0:
            break

    if tmp < 0:
        i += 1
    elif tmp > 0:
        j -= 1

print(a, b)
  • 리스트를 정렬한 뒤, 앞에서 시작하는 i와 뒤에서 시작하는 j를 사용해 투 포인터로 풀이
  • i, j번째 값들을 합하여 절대값이 낮으면 value, a, b를 각각 합한 값의 절대값, i, j로 지정한다. 0이면 더 구할 필요가 없으므로 종료
  • tmp가 0보다 작으면 더 큰 값끼리 더하기 위해 i를 1씩 늘리고, 반대의 경우 작은 값을 더하기 위해 j를 줄인다.