16928번 뱀과 사다리 게임
BFS
골드 V
💡문제 분석 요약
BFS
💡알고리즘 설계
움직이는 것은 그 전에 영향을 받으므로, 이전 값의 영향을 넣을 수 있는 bfs를 떠올렸으며, 여러 경우의 수를 따져가면서도 최소를 카운팅 해야하기에 dfs가 아닌 bfs로 풀었다.
기본적으로 index =1에 1, 2에는 2값을 가지는 보드를 생성한 후, 뱀과 사다리로 연결되어 움직이는 경우에는, 도착지의 값을 입력한다.
4→62일 경우, board[4]=62
visited에는 방문한 번호의 인덱스를 가진 칸에 True를 넣는다.
그리고 queue에 돌아가면서 1~6까지 더한 뒤, 범위 내라면 queue에 추가한다.
💡코드
import sys
from collections import deque
input= sys.stdin.readline
n,m = map(int,input().strip().split(' '))
board = [i for i in range(101)]
visited = [False for _ in range(101)]
for _ in range(n):
x,y = map(int,input().strip().split(' '))
board[x] =y
for _ in range(m):
u,v = map(int,input().strip().split(' '))
board[u] =v
q= deque()
q.append((1,0))
visited[1] = True
while q:
new = deque()
n,cnt =q.popleft()
if n==100:
print(cnt)
break
for i in range(1,7):
move = n+i
if 0<move<=100 and not visited[board[move]] and 0<board[move]<=100 :
q.append((board[move],cnt+1))
visited[board[move]] = True
💡오류 난 이유
- range오류. visited와 board의 range가 달랐고 1~101까지로 설정한게 잘못이었다. 인덱스와 그에 대한 값을 무엇으로 설정할건지 확실하게 하자.
- counting을 위해 new_queue를 생성하고, 그에 따른 값을 q에 다시 넣어서 초기화했지만, 이러면 1~6까지의 경우의 수를 다 넣지 않고 초기화 되므로 더 오래걸린다. 따라서 q 자체에 단계인 cnt를 넣는 것으로 변경하였다.
💡 기억할 것
- 인덱스와 그에 대한 값을 무엇으로 설정할건지 확실하게 하자.
- 활용하려는 코드를 적용했을 때 어떤 값이 실제로 들어가는지 그려보고 적용해보자.