728x90
알고리즘 설명
문제 설명
서로 다른 세 개의 용액의 값의 합이 0에 가장 가까운 경우를 찾는다.
코드 설명
용액들을 정렬한다.
중간 포인터를 모든 인덱스를 순회하면서, 첫 번째 인덱스와 마지막 인덱스를 이동시키면서 투 포인터 방식으로 값을 찾는다.
시간복잡도 : 정렬 O(n log n) + 투포인터 O(n ^ 2)
import sys
input = sys.stdin.readline
n = int(input())
arr = sorted(list(map(int, input().split())))
# 초기값을 무한대로 설정
min_sum = float('inf')
result = []
# i는 첫 번째 용액을 선택하는 인덱스
for i in range(n - 2):
s, e = i + 1, n - 1
while s < e:
current_sum = arr[i] + arr[s] + arr[e]
# 현재의 합이 0에 더 가까운지 확인
if abs(current_sum) < abs(min_sum):
min_sum = current_sum
result = [arr[i], arr[s], arr[e]]
# 합이 0보다 크면 오른쪽 포인터를 줄여서 합을 줄입니다.
if current_sum > 0:
e -= 1
# 합이 0보다 작으면 왼쪽 포인터를 늘려서 합을 증가시킵니다.
elif current_sum < 0:
s += 1
# 합이 0이면 결과를 출력하고 종료합니다.
else:
print(arr[i], arr[s], arr[e])
exit(0)
# 최종 결과 출력
print(*result)
반응형
'백준 문제풀이 코드저장소 > Gold' 카테고리의 다른 글
Baekjoon 9466. 텀 프로젝트 / Python (0) | 2024.07.02 |
---|---|
Baekjoon 4386. 별자리 만들기 / Python (2) | 2024.07.01 |
Baekjoon 2533. 사회망 서비스 (SNS) / Python (1) | 2024.07.01 |
Baekjoon 2482. 색상환 / Python (0) | 2024.07.01 |