(전공복습) 데이터과학 4. 시각화
차례
BOJ 2467 용액과 유사한 문제.
다만, 여기에서는 입력이 정렬되어 있지 않고, 한번에 세 용액을 섞는다는 것이 차이점이다.
기본적인 아이디어는 2467번과 동일한데, 첫 번째 용액은 선형탐색으로 고르고,
두 번째와 세 번째 용액을 투 포인터로 찾는 방식으로 작동하도록 했다.
이때, 첫 번째 용액을 다시 고르지 않게 하기 위해서, 포인터들이 해당하는 인덱스를 건너뛰도록 했다.
아래 코드에서는 리스트 내 선택한 용액의 값을 INF
로 바꿔주고 있지만, 다시 돌이켜보면 필요한 작업은 아닌 것 같다.
n = int(input())
arr = sorted(list(map(int, input().split())))
INF = float('inf')
cur = INF
for k in range(n):
# k는 첫 번째 용액의 인덱스, t는 첫 번째 용액의 값
t = arr[k]
arr[k] = INF
# 투 포인터가 작동하는 부분
i, j = 0, n-1
while i < j:
# i나 j가 k면 건너 뜀
if i == k:
i += 1
continue
elif j == k:
j -= 1
continue
# temp는 섞인 용액의 값
temp = t + arr[i] + arr[j]
# 값이 이전의 용액보다 작으면 갱신
if abs(temp) < cur:
cur = abs(temp)
ans = (t, arr[i], arr[j])
# 용액의 값이 0이면 탈출
if not temp:
break
elif temp < 0:
i += 1
else:
j -= 1
arr[k] = t
print(*ans)
문제 링크 문제 링크
개요 선형적인 자료구조에서는 값에 접근하는 데에 \(O(1)\)이면 충분하지만, 대신 부분합을 구하는 데에는 \(O(N)\)이 필요하다. 그렇다면 이 자료구조를 이진 트리로 구성하면 어떨까? 값에 접근하는 데에 걸리는 시간이 \(O(\lg N)\)으로 늘어나지만 대신 부분합을 구하...
개요 다익스트라 알고리즘과 함께 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘보다 느리지만, 음수 가중치 간선이 있어도 작동하며, 음수 가중치 사...
개요 다익스트라 알고리즘은 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘 중 하나이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 단, 다익스트라 알고리즘은 음수 가중치 엣지를 허용하지 않는다. 이 경우에는 벨만-...