05
01

문제 제목, 난이도

16928번 : 뱀과 사다리 게임, 실버1


문제 링크

www.acmicpc.net/problem/16928

 

16928번: 뱀과 사다리 게임

첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으

www.acmicpc.net


코드(Python)

# 뱀과 사다리
import sys
from collections import deque

input = sys.stdin.readline

board = []
visited = [False] * 110
for i in range(0,110) :
    board.append([i,i])

n, m = map(int,input().split())
for _ in range(n+m) :
    x, y = map(int,input().split())
    board[x][1] = y

li = deque([[1,0]])

def roll(cur) :
    for i in range(1,7) :
        temp = board[cur[0]+i][1]
        count = cur[1] + 1
        if visited[temp] == False :
            li.append([temp,count])
            visited[temp] = True

while True :
    cur = li.popleft()
    if cur[0] == 100 :
        print(cur[1])
        break
    else :
        roll(cur)

풀이

110 x 110 보드 (형식 : [출발점, 끝점])를 생성합니다. (99번째 칸에서 2칸 이상 이동시 인덱스 오류 발생 가능성)

 

뱀과 사다리 개수는 중요하지 않아서 더한 뒤 한 번에 입력받았습니다.

 

li라는 이름의 deque 생성 (형식 : [위치, 주사위 굴린 횟수])

 

주사위를 한 번씩 굴린 뒤 방문하지 않았으면 li에 append

 

li는 자연스럽게 [ (한번 굴린 경우들) , (두 번 굴린 경우들) , ... ] 로 구성됨

 

100에 도달 시 프린트 문 실행 후 종료


체크리스트

BFS, 완전탐색

방문했었는지 확인하지 않아서 처음에 시간 초과 발생

이 문제에서는 주사위를 덜 굴린 순서대로 방문하고 있기 때문에 몇 번째만에 도착하는지는 확인하지 않아도 괜찮다.

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ / Python] 11286번 : 절댓값 힙  (0) 2021.07.10
[BOJ / Python] 14500번 : 테트로미노  (0) 2021.05.14
[BOJ / Python] 10026번 : 적록색약  (0) 2021.05.11
[BOJ / Python] 1107번 : 리모컨  (0) 2021.05.07
COMMENT