Skip to main content

2407두용액

·145 words·1 min· loading

https://www.acmicpc.net/source/49072104

로그인www.acmicpc.net

투 포인터가 뭔지 궁금해서 풀이를 봤다.

생각보다 간단했다.

먼저 정렬된 리스트를가지고 한다.

처음에는 리스트[0],[-1]을 가지고 한다. (a,b)

우리의 목적은 0에 가장 가까운 값을 찾는것이다.

만일 a+b가 이전의 정답보다 작다면

정답을 교체해준다.

그리고 a+b가 0보다 크다면, 더 작은 수가 필요할 것이므로 end에서 1을 빼서 다시 계산,

반대라면 더 큰 수가 필요하므로 start+1해서 다시 계산한다.

start와 end의 위치가 바뀔때까지 탐색해서, 현 탐색 중 가장 a+b가 0에 가까웠던 a,b를 찾아 출력한다.

import sysinput = sys.stdin.readlineanswer = 1e10answer1 = [None, None]
n = int(input())arr = sorted([*map(int, input().split())])start, end = 0, n - 1
while end > start:    tmp = arr[start] + arr[end]    if abs(tmp) < answer:
        answer = abs(tmp)        answer1 = [arr[start], arr[end]]
    if tmp < 0:  # 0보다작다면        start += 1  # 더큰방향으로    elif tmp > 0:  # 9보다크다면
        end -= 1  # 더작아지는방향으로    else:  # 0이면 볼거없음
        answer = [arr[start], arr[end]]        print(min(answer1), max(answer1))
        exit()print(min(answer1), max(answer1))