투포인터를 사용하자!
- left = 0, right = N-1로 지정한다.
- 성질합 최소값(_min)을 sys.maxsize로 설정한다.
- 두 용액의 성질합이 _min보다 작다면 answerL과 answerR에 각각 인덱스를 저장하고 _min을 update한다.
- 두 용액의 성질합이 0보다 작으면 left값을 하나 늘여주고, 크다면 right값을 하나 줄여준다.
- left와 right가 같아질때 종료된다.
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
left = 0
right = N-1
answerL = 0
answerR = 0
_min = sys.maxsize
while left < right:
_sum = arr[left] + arr[right]
if abs(_sum) < _min:
answerL = left
answerR = right
_min = abs(_sum)
if _sum > 0:
right -= 1
elif _sum < 0:
left += 1
else:
break
print(arr[answerL], arr[answerR])
'개발 > 알고리즘' 카테고리의 다른 글
[백준 16234] 인구 이동 (python) (0) | 2021.04.20 |
---|---|
[백준 16235] 나무 재테크 (python) (0) | 2021.04.20 |
[백준 2805] 나무자르기 (python) (0) | 2021.04.19 |
[백준 4485] 녹색 옷 입은 애가 젤다지? (python) (0) | 2021.04.19 |
[백준 1238] 파티 (python) (0) | 2021.04.19 |
최근댓글