https://www.acmicpc.net/problem/16928
16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으
www.acmicpc.net
from collections import deque
n, m = map(int, input().split()) # 사다리, 뱀
a = [[i] for i in range(1, 101)]
visited = [False] * 101
ladder = [[] for _ in range(101)]
snake = [[] for _ in range(101)]
for i in range(n):
start, end = map(int, input().split())
ladder[start].append(end)
for i in range(m):
start, end = map(int, input().split())
snake[start].append(end)
queue = deque()
queue.append((1, 0))
while queue:
tmp = []
x, count = queue.popleft()
visited[x] = True
if x == 100:
print(count)
exit()
for i in range(1, 7):
nx = x + i
if 0 <= nx <= 100 and not visited[nx]:
visited[nx] = True
if ladder[nx]:
queue.append((*ladder[nx], count + 1))
if snake[nx]:
queue.append((*snake[nx], count + 1))
else:
queue.append((nx, count + 1))
뱀과 사다리를 구분지어 bfs로 100이 나왔을 때 최소되는 count를 반환해준다.
사다리는 무조건 높은 곳에, 뱀은 낮은 곳에 위치하지만
오히려 뱀을 타야지 더 빠르게 갈 수 있는 경우의 수도 있기에 주의깊게 살펴야 한다.
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.14502 연구소 (0) | 2022.01.26 |
---|---|
[파이썬] 백준 알고리즘 No.16948 데스 나이트 (0) | 2022.01.26 |
[파이썬] 백준 알고리즘 No.3187 양치기 꿍 (0) | 2022.01.24 |
[파이썬] 백준 알고리즘 No.9663 N-Queen (0) | 2022.01.24 |
[파이썬] 백준 알고리즘 No.16198 에너지 모으기 (0) | 2022.01.23 |