(전공복습) 데이터과학 4. 시각화
차례
겉보기엔 기하 문제 같지만, 잘 생각해보면 그냥 스택 문제라는 걸 알 수 있다.
원이 모두 같은 축 위에 위치하기 때문에, 결국 축 위 원의 양 끝점만 유의미하기 때문.
양 끝 점을 스택 괄호 문제의 괄호라고 생각하면 된다.
처음부터 순회하면서 괄호를 스택에 넣다가 괄호 쌍이 완성되면 스택에서 지우는 것을 반복한다.
마지막에 스택이 비어있으면 조건에 부합하고, 비어있지 않다면 부합하지 않는 것이다.
좀 더 빠른 풀이를 보면 그냥 괄호 문제처럼 양 끝 점만 저장한 다음에 정렬했던데,
이 풀이는 -2_010_000
부터 2_010_000
을 모두 순회하므로 조금 더 비효율적이긴 하다.
#!python
from sys import stdin
n = int(stdin.readline())
# -1_000_000 <= x <= 1_000_000이므로 -1_010_000 <= x +-r <= 1_010_000
line = [-1 for _ in range(2_020_001)]
# 각 원의 양 끝점 위치 표시
for i in range(n):
x, r = map(int, stdin.readline().split())
x += 1_010_000
line[x+r] = i
line[x-r] = i
# 스택으로 괄호문제 푸는 부분
stack = []
for i in line:
if i == -1:
continue
if not stack or stack[-1] != i:
stack.append(i)
else:
stack.pop()
# 스택이 비었다면 문제 없음
print('NO' if stack else 'YES')
문제 링크 문제 링크
개요 선형적인 자료구조에서는 값에 접근하는 데에 \(O(1)\)이면 충분하지만, 대신 부분합을 구하는 데에는 \(O(N)\)이 필요하다. 그렇다면 이 자료구조를 이진 트리로 구성하면 어떨까? 값에 접근하는 데에 걸리는 시간이 \(O(\lg N)\)으로 늘어나지만 대신 부분합을 구하...
개요 다익스트라 알고리즘과 함께 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘보다 느리지만, 음수 가중치 간선이 있어도 작동하며, 음수 가중치 사...
개요 다익스트라 알고리즘은 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘 중 하나이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 단, 다익스트라 알고리즘은 음수 가중치 엣지를 허용하지 않는다. 이 경우에는 벨만-...