본문 바로가기
Algorithm/BOJ

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

by _temp 2022. 3. 25.
https://www.acmicpc.net/problem/2467
# 용액
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))

left, right = 0, N-1
value = sys.maxsize
answer = []
while left < right:
    if abs(arr[left]+arr[right]) <= value:
        answer = [arr[left], arr[right]]
        value = abs(arr[left]+arr[right])
    if arr[left]+arr[right] < 0:
        left += 1
    elif arr[left]+arr[right] > 0:
        right -= 1
    else:
        break

print(*answer)

 

투포인터
1. 처음과 끝의 인덱스를 left와 right으로 설정
2. left < right 일 동안
    - 두 용액 합의 절댓값이 현재 value보다 작거나 같으면 answer에 두 용액, value에 현재 값
    - 두 용액의 합이 0보다 작으면 left+=1
    - 두 용액의 합이 0보다 크면 right-=1
    - 두 용액의 합이 0이면 break
3. answer의 값 출력

 

용액이 정렬된 상태의 차이만 다른 같은 문제를 풀었었다.

[백준] 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

 

세 용액으로 같은 로직을 가지고 있는 문제도 풀었었다.

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

 

[백준] 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 l..

2hs-rti.tistory.com