-
[백준 14921] 용액 합성하기 (Python)Algorithm & Problem Solving/투 포인터(Two Pointer) 2020. 12. 30. 14:52
문제풀이
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)
결과
문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!
'Algorithm & Problem Solving > 투 포인터(Two Pointer)' 카테고리의 다른 글
[백준 16472] 고냥이 (Python) (0) 2021.01.05 [백준 15565] 귀여운 라이언 (Python) (0) 2020.12.30 [백준 2842] 집배원 한상덕 (Python) (0) 2020.12.29 [백준 1484] 다이어트 (Python) (0) 2020.12.29 [백준 14746] Closest Pair (Python) (0) 2020.12.29