알고리즘/문제풀이
[Python] 백준 2470 두 용액
정찡이
2021. 10. 30. 00:15
728x90
1. 문제 링크
https://www.acmicpc.net/problem/2470
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. 결론
- 투 포인터를 이용하는 문제