[백준/파이썬] 2470번

민정·2023년 12월 20일
0

[백준/파이썬]

목록 보기
194/245
post-thumbnail

📍백준 2470번 문제

https://www.acmicpc.net/problem/2470

코드

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))

arr.sort()
start = 0
end = len(arr)-1

ans = abs(arr[start]+arr[end])
final = [arr[start], arr[end]]
while start < end:
    temp = arr[end] + arr[start]
    if abs(temp) < ans:
        ans = abs(temp)
        final = [arr[start], arr[end]]
        if ans == 0:
            break
    if temp < 0:
        start += 1
    else:
        end -= 1
print(final[0], final[1])

풀이

투포인터와 이분탐색을 이용하면 된다.

  • 정렬후, 배열 내의 첫번째값과 마지막값을 포인터 값(start, end)으로 설정한다.
  • 두개의 값을 더한 후 , final에 값을 저장한다.
  • start값과 end값이 만나기 전까지 while문을 돌린다.
  • 음수/양수 상관없이 0에 가장 가까운 값을 출력해야하므로 start, end값을 더한 후 절대값 처리한다.
  • 현재 ans(0에 가장 가까운 값)보다 작다면 값을 바꿔준다.
  • 만약 0이라면, 출력해준다.
  • 만약 더한 값이 음수라면 start값에 1을 더해주어 오른쪽으로 이동해주고, 양수라면 end값에 1을 빼주어 왼쪽으로 이동한다.
profile
パㅔバ6ㅇr 덤벼ㄹΓ :-0

0개의 댓글