Algorithm & Problem Solving/투 포인터(Two Pointer)

[백준 14921] 용액 합성하기 (Python)

baby_ohgu 2020. 12. 30. 14:52

www.acmicpc.net/problem/14921

 

14921번: 용액 합성하기

홍익대 화학연구소는 다양한 용액을 보유하고 있다.  각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당

www.acmicpc.net

 

문제풀이

N, arr : 입력값

left, right : 투 포인터

ans : 결과값

 

입력 배열이 정렬되어 있기 때문에 따로 정렬이 필요하지 않고, 곧바로 투 포인터(Two-Pointer)를 진행해서 탐색하면 쉽게 해결할 수 있다.

 

1. left, right 를 통해 배열의 양쪽 끝에서부터 각 원소를 더해가며(tmp) 최소값을 찾는다.

- tmp의 값이 음수이면 절대값을 줄이기 위해 left를 1 증가한다.

- tmp의 값이 양수이면 절대값을 줄이기 위해 right를 1 감소한다.

 

2. 최소 결과값을 출력한다.

 

코드

import sys

if __name__ == '__main__':
    N = int(input())
    arr = list(map(int, sys.stdin.readline().split()))

    left, right = 0, N - 1
    ans = arr[left] + arr[right]
    while left < right:
        tmp = arr[left] + arr[right]
        if abs(ans) > abs(tmp):
            ans = tmp
        if tmp < 0: left += 1
        else: right -= 1
    print(ans)

 

결과

 

문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!