Algorithm/BOJ
[백준] 2473번 - 세 용액 (파이썬)
_temp
2022. 3. 10. 17:17
# 세 용액
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
arr.sort()
result = sys.maxsize
three = []
for i in range(N-2):
left = i+1
right = N-1
while left < right:
temp = arr[i] + arr[left] + arr[right]
if abs(temp) < result:
result = abs(temp)
three = [arr[i], arr[left], arr[right]]
if temp < 0:
left += 1
elif temp > 0:
right -= 1
else:
break
print(*three)
투포인터
1. 정렬을 하고, 세 가지 용액의 시작 지점인 i를 각 용액이 될 수 있도록 for문 (세 용액이므로 N-2까지)
- 투 포인터를 i값을 제외한 양쪽 끝 인덱스 값에 놓는다.
- 세 용액의 값이 가장 작은 값으로 min_result를 업데이트, 결과 저장
- 음수이면, left += 1 (정렬을 했으니 값이 증가)
- 양수이면, right -= 1 (정렬을 했으니 값이 감소)
- 0이면, 최솟값이니 break
2. result 출력
아주 비슷한 문제인 두 용액을 풀었던 적이 있어서 매우 쉽게 풀었다.
블로그를 시작하지 않았을 때, 문제를 풀었어서 업로드하지 못했는데
연관이 있는 문제를 풀게 되어서 업로드를 했다.
[백준] 2470번 - 두 용액
[백준] 2470번 - 두 용액 (파이썬)
# 두 용액 import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split())) arr.sort() result = [] min_result = sys.maxsize sum = 0 left = 0 right = N-1 while left < righ..
2hs-rti.tistory.com