[알고리즘] 백준 - 두 용액

백준 - 두 용액

내 풀이

import sys
from collections import deque
from itertools import combinations
from itertools import permutations
import math
sys.setrecursionlimit(100000)

N = int(input())
arr = list(map(int, input().split()))
arr.sort()
answer = []

left, right = 0, len(arr) - 1
min_val = sys.maxsize
min_left, min_right = 0, 0

while left < right:
    if arr[left] + arr[right] == 0:
        min_left, min_right = left, right
        break
    elif abs(arr[left] + arr[right]) < min_val:
        min_val = abs(arr[left] + arr[right])
        min_left, min_right = left, right
    else:
        if arr[left] + arr[right] > 0:
            right -= 1
        else:
            left += 1

print(arr[min_left], arr[min_right])

min_val은 최소 차이이다. 만약 두 용액의 차이가 최소 차이보다 작으면 최소차이를 갱신해주고, min_left, min_right도 갱신해준다. 다음 턴에서 만약 이 두 용액의 합이 양수 였으면 right -=1을 하고 음수였으면 left +=1을 해보면 된다.

좋은 웹페이지 즐겨찾기