[백준] 2473번 세 용액

거북이·2023년 7월 17일
0

백준[골드3]

목록 보기
8/21
post-thumbnail

💡문제접근

  • 처음에 접근한 투 포인터 방식은 아래의 코드와 같았다.
for i in range(1, len(data)-1):
	left = 0
    right = N - 1
    temp = i
   	res = data[left] + data[i] + data[right]
  • 왼쪽 포인터와 오른쪽 포인터 사이에서 for문으로 순회를 하여 세 개의 값들을 골라 0에 가까운 조합을 만들 수 있는 경우의 수를 구하려고 했지만 실패하여 다른 방법을 생각했다.
  • 코드는 아래와 같다.

💡코드(메모리 : 31256KB, 시간 : 2644ms)

import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, input().strip().split()))
arr.sort()
res = 4000000000

def binary_search(data):
    global res
    for i in range(len(data) - 2):
        left = i + 1
        right = N - 1
        while left < right:
            temp = data[i] + data[left] + data[right]
            if abs(temp) <= abs(res):
                a, b, c = data[i], data[left], data[right]
                res = a + b + c

            if temp == 0:
                print(a, b, c)
                sys.exit(0)
            elif temp < 0:
                left += 1
            else:
                right -= 1
    return a, b, c

result = list(binary_search(arr))
result.sort()
print(*result)

💡소요시간 : 27m

0개의 댓글