# 세 용액
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
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 19236번 - 청소년 상어 (파이썬) (0) | 2022.03.12 |
---|---|
[백준] 10282번 - 해킹 (파이썬) (0) | 2022.03.11 |
[백준] 2470번 - 두 용액 (파이썬) (0) | 2022.03.10 |
[백준] 2812번 - 크게 만들기 (파이썬) (0) | 2022.03.09 |
[백준] 17822번 - 원판 돌리기 (파이썬) (0) | 2022.03.08 |