본문 바로가기
Algorithm/BOJ

[백준] 2473번 - 세 용액 (파이썬)

by _temp 2022. 3. 10.

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

# 세 용액
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