Algorithms
[baekjoon]세 용액 - Python
짤진이
2024. 5. 4. 19:12
반응형
문제 링크
https://www.acmicpc.net/problem/2473
문제 이해
이분 탐색 문제이다.
처음에는 왼쪽 포인터와 오른쪽 포인터를 설정한 후 가운데 값에서 나머지 한 값을 찾으려고 했다.
하지만 전체 범위를 0부터 (n-2)로 지정한 후 처음 i 값에서 1을 더한 값을 왼쪽 포인터로 두고 n-1을 오른쪽 포인터로 둔다.
🎱 범위가 n-2인 이유 => 왼쪽 포인터와 오른쪽 포인터를 포함해야 하므로 마지막 인덱스 값을 n-2로 두어야
왼쪽 포인터, 오른쪽 포인터 각 1개씩 설정할 수 있기 때문이다.
가장 왼쪽 값을 now_val = liquid[i]로 지정해둔 후 왼쪽 포인터를 i+1, 오른쪽 포인터를 n-1로 설정한다.
값이 0보다 크면 right_p를 -1하고 값이 0보다 작으면 left_p를 +1한다.
절댓값으로 비교한 후 값이 작을 때마다 res 리스트를 업데이트 해준다.
세 수의 합이 0일 시에는 바로 print한 후 sys.exit()로 종료하고 for문이 종료되면 res를 출력하여 0에 가장 가까운 값을 출력한다.
코드
import sys
n = int(sys.stdin.readline())
liquid = list(map(int,sys.stdin.readline().split()))
liquid.sort()
tmp = 3000000000
for i in range(n-2):
now_val = liquid[i]
left_p = i + 1
right_p = n - 1
while left_p < right_p:
tmp_sum = now_val + liquid[left_p] + liquid[right_p]
if abs(tmp_sum) <= abs(tmp) :
tmp = tmp_sum
res = [now_val, liquid[left_p], liquid[right_p]]
if tmp_sum > 0:
right_p -= 1
elif tmp_sum < 0:
left_p += 1
else:
print(*res)
sys.exit()
print(*res)
반응형