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
1. Preview
시간 복잡도: O(6*NM), bfs
공간 복잡도: O(NM)
유형: 그래프 탐색, bfs
2. 초기 접근 방법
visited[e] : 사다리
visited[nx] : 일반 주사위 길
2가지 경우 모두 queue에 삽입하여, 해당 경우를 고려해 탐색하게 된다.
for s, e in road:
if s == nx and not visited[e]:
visited[e] = visited[x] + 1
q.append(e)
# 중복 방문 X
if not visited[nx]:
visited[nx] = visited[x] + 1
q.append(nx)
3. 생각
문제에서 요구하는 것은 뱀과 사다리를 만났을 때 선택해서 타거나, 타지 않는 것이 아니라 무조건 타는 것이다.
요구 사항을 정확히 파악하고 로직을 철저히 검증하자.
4. 코드
import sys
from collections import deque
input = sys.stdin.readline
# 사다리 수, 뱀 수
N, M = map(int, map(int, input().split()))
road = []
visited = [0] * 106
for _ in range(N + M):
s, e = map(int, map(int, input().split()))
road.append((s, e))
q = deque()
q.append(1)
while q:
x = q.popleft()
if x == 100:
print(visited[100])
exit()
for i in range(1, 7):
nx = x + i
# 사다리나 뱀일 경우, 이용한다.
for s, e in road:
if nx == s:
nx = e
# 중복 방문 X
if not visited[nx]:
visited[nx] = visited[x] + 1
q.append(nx)
'Algorithm > Graph' 카테고리의 다른 글
[백준] 2206번 벽 부수고 이동하기 _ Python (0) | 2024.04.09 |
---|---|
[백준] 9466번 텀 프로젝트 _ Python (0) | 2024.03.20 |
[백준] 16624번 피리 부는 사나이 _ Python (0) | 2024.03.10 |
[백준] 11559번 Puyo Puyo _ Python (0) | 2024.02.01 |
[백준] 1325번 효율적인 해킹 _ Python (0) | 2023.11.28 |