(전공복습) 데이터과학 4. 시각화
차례
파이썬의 문자열 처리는 비효율적이기 때문에 스택으로 풀어야 하는 문제.
그런데 다 풀고 나서 확인해보니 브루트포스로도 풀린다고 한다.
스택에 문자를 넣을 때, 해당 문자가 폭발 문자열에서 몇 번째 문자에 해당하는지도 함께 넣으면 쉽게 풀 수 있다.
string = input()
bomb = input()
n = len(bomb)
stack = []
for char in string:
# temp는 top의 번호, stack이 비어 있으면 0
temp = stack[-1][1] if stack else 0
# 다음 문자를 확인해서 같으면 temp를 증가시킴
if char == bomb[temp]:
temp += 1
elif char == bomb[0]:
temp = 1
else:
temp = 0
stack.append((char, temp))
if temp == n:
# 이것보다 del을 사용하는 게 더 빠르다고 한다...
for _ in range(n):
stack.pop()
# 스택에 남은 문자들을 연결해서 출력
print(''.join((c for c, i in stack)) if stack else 'FRULA')
문제 링크 문제 링크
개요 선형적인 자료구조에서는 값에 접근하는 데에 \(O(1)\)이면 충분하지만, 대신 부분합을 구하는 데에는 \(O(N)\)이 필요하다. 그렇다면 이 자료구조를 이진 트리로 구성하면 어떨까? 값에 접근하는 데에 걸리는 시간이 \(O(\lg N)\)으로 늘어나지만 대신 부분합을 구하...
개요 다익스트라 알고리즘과 함께 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘보다 느리지만, 음수 가중치 간선이 있어도 작동하며, 음수 가중치 사...
개요 다익스트라 알고리즘은 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘 중 하나이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 단, 다익스트라 알고리즘은 음수 가중치 엣지를 허용하지 않는다. 이 경우에는 벨만-...