Algorithm & Problem Solving/투 포인터(Two Pointer)
[백준 14921] 용액 합성하기 (Python)
baby_ohgu
2020. 12. 30. 14:52
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)
결과
문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!