백준 2470번 두 용액 파이썬

박슬빈·2021년 11월 26일
0

알고리즘

목록 보기
33/40

문제

입력 , 출력

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)

설명

키포인트

  1. 이분탐색 , 투포인터를 사용해서 풀이
  2. mid값으로 하지 않고 left , right만 사용함
  3. 두 값을 더했을 경우 0보다 작은경우
마이너스 + 마이너스
마이너스 (절대값이 더 큼) + 플러스
위 두가지 경우가 있다.
이럴 경우에는 배열을 정렬했기때문에
왼쪽 인덱스를 1씩 더해주면 된다.
  1. 0보다 같거나 큰경우는 오른쪽 포인터에 인덱스를 1씩 더해준다.
  2. 두가지 포인터를 더했을때 절댓값이 기존에 저장된 정보보다
    작을 경우에는 res에 값을 갱신해준다.
profile
이것저것합니다

0개의 댓글