16928: 뱀과 사다리 게임

ewillwin·2023년 7월 3일
0

Problem Solving (BOJ)

목록 보기
101/230

  • 간단한 bfs 문제
  • 한 가지 주의해야할 점은 npos를 갱신할 때, 뱀인지 사다리인지 확인하고 난 후에 board의 최소시간 갱신 및 queue에 npos를 append를 해줘야함
    -> "npos = pos + i" + "npos = ladder[npos]" 또는 "npos = snake[npos]"까지 해준 결과가 next node임
import sys
from collections import deque

def bfs():
    global min_cnt
    queue = deque(); queue.append(1)

    while queue:
        pos = queue.popleft()
        if pos == 100:
            min_cnt = board[pos]
            break
        for i in range(1, 7): # 주사위 굴리기
            npos = pos + i
            if npos <= 100 and board[npos] == 0:
                if npos in ladder:
                    npos = ladder[npos]
                if npos in snake:
                    npos = snake[npos]
                if board[npos] == 0: #뱀인지 사다리인지 확인하고 나서 board의 최소시간 및 queue에 npos append
                    board[npos] = board[pos] + 1
                    queue.append(npos)


N, M = map(int, sys.stdin.readline()[:-1].split())
ladder = dict()
for n in range(N):
    tmp = list(map(int, sys.stdin.readline()[:-1].split()))
    ladder[tmp[0]] = tmp[1]
snake = dict()
for m in range(M):
    tmp = list(map(int, sys.stdin.readline()[:-1].split()))
    snake[tmp[0]] = tmp[1]

min_cnt = 10e9
board = [0 for _ in range(101)]
bfs()
print(min_cnt)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글