728x90
반응형
앞, 뒤 방향과 노드별 이동거리 모두 고려해줘야 되는 bfs 문제이다.
아래와 같이 앞, 뒤 방향의 경우로 둘로 나눠서 반복문을 짜면 96ms로 통과된다.
from collections import deque
def bfs(a, b, bridge, N):
q = deque()
q.append(a-1)
check = [-1]*N
check[a-1] = 0
while q:
node = q.popleft()
for n in range(node, N, bridge[node]):
if check[n] == -1:
q.append(n)
check[n] = check[node] + 1
if n == b-1:
return check[n]
for n in range(node, -1, -bridge[node]):
if check[n] == -1:
q.append(n)
check[n] = check[node] + 1
if n == b-1:
return check[n]
return -1
N = int(input())
bridge = list(map(int, input().split()))
a, b = map(int, input().split())
print(bfs(a, b, bridge, N))
단순하게 짧게 짜 봤는데도 976ms로 통과됐다.
from collections import deque
def bfs(a, b, bridge, N):
q = deque()
q.append(a-1)
check = [-1]*N
check[a-1] = 0
while q:
node = q.popleft()
for n in range(N):
if (n-node)%bridge[node] == 0 and check[n] == -1:
q.append(n)
check[n] = check[node] + 1
if n == b-1:
return check[n]
return -1
N = int(input())
bridge = list(map(int, input().split()))
a, b = map(int, input().split())
print(bfs(a, b, bridge, N))
728x90
반응형
'Agorithm > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 14888번 연산자 끼워넣기(python) (0) | 2021.08.08 |
---|---|
백준 알고리즘 14562번 태권왕(python) (0) | 2021.06.15 |
백준 알고리즘 21867번 Java Bitecode(python) (0) | 2021.06.06 |
백준 알고리즘 21866번 추첨을 통해 커피를 받자(python) (0) | 2021.06.06 |
백준 알고리즘 6603번 로또(python) (0) | 2021.04.27 |