알고리즘/문제풀이

[Python] 백준 2470 두 용액

정찡이 2021. 10. 30. 00:15
728x90

1. 문제 링크

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

 

2470번: 두 용액

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

www.acmicpc.net


2. 문제 요약

두 용액을 혼합하여 0에 가장 가까운 용액 만들기


3. 아이디어 정리

  • 투 포인터 이용
    • 합이 0보다 큰 경우 right - 1
    • 합이 0보다 작은 경우 left + 1

4. 문제 풀이

4-1. 내 풀이

import sys

n = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
arr.sort()

left = 0
right = len(arr) - 1
result = int(1e10)
ans = []
while left < right:
    temp = arr[left] + arr[right]
    # 지금까지 합이 가장 작은 경우 갱신 
    if result > abs(temp):
        result = abs(temp)
        ans = [arr[left], arr[right]]
    # 양수이면 right -1
    if temp > 0:
        right -= 1
    # 음수이면 left +1
    elif temp < 0:
        left += 1
    # 0이 나온 경우 그만 
    else:
        break

print(*ans)

 


5. 결론

  • 투 포인터를 이용하는 문제