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))