문제
입력 , 출력
solution
import sys
input = sys.stdin.readline
def bisearch(start, end):
global s1, s2, res
while start <= end:
if abs(arr[start] + arr[end]) < res:
s1 = arr[start]
s2 = arr[end]
res = abs(arr[start] + arr[end])
if arr[start] + arr[end] < 0:
start += 1
else:
end -= 1
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
res = 2e+9 + 1
s1 = 0
s2 = 0
bisearch(0, n - 1)
print(s1, s2)
설명
키포인트
- 이분탐색 , 투포인터를 사용해서 풀이
- mid값으로 하지 않고 left , right만 사용함
- 두 값을 더했을 경우 0보다 작은경우
마이너스 + 마이너스
마이너스 (절대값이 더 큼) + 플러스
위 두가지 경우가 있다.
이럴 경우에는 배열을 정렬했기때문에
왼쪽 인덱스를 1씩 더해주면 된다.
- 0보다 같거나 큰경우는 오른쪽 포인터에 인덱스를 1씩 더해준다.
- 두가지 포인터를 더했을때 절댓값이 기존에 저장된 정보보다
작을 경우에는 res에 값을 갱신해준다.