💡문제접근
- 처음에 접근한 투 포인터 방식은 아래의 코드와 같았다.
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