๐๋ฌธ์ ํ์ํ๊ธฐ
- ๊ฐ ๋ฉด์ 1๋ถํฐ 6๊น์ง ์๊ฐ ํ๋์ฉ ์ ํ์๋ ์ ์ก๋ฉด์ฒด ์ฃผ์ฌ์ ์ฌ์ฉ
- ๋ณด๋ํ์ ํฌ๊ธฐ๋ 10x10๋ก, ์ด 100๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์
- ๋ณด๋ํ์ ๊ฐ ์นธ์ 1๋ถํฐ 100๊น์ง ์๊ฐ ํ๋์ฉ ์์๋๋ก ์ ํ์์
- ํ๋ ์ด์ด๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค ๋์จ ์๋งํผ ์ด๋
- i์นธ์ ์์ ๋, ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค 4๊ฐ ๋์ค๋ฉด i+4๋ฒ ์นธ์ผ๋ก ์ด๋
- ๋ง์ฝ 100๋ฒ ์นธ์ ๋์ด๊ฐ๋ค๋ฉด ์ด๋ํ ์ ์์
- ๋์ฐฉํ ์นธ์ด ์ฌ๋ค๋ฆฌ๋ผ๋ฉด ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ์๋ก ์ด๋
- ๋์ฐฉํ ์นธ์ ๋ฑ์ด ์๋ค๋ฉด ๋ฑ์ ๋ฐ๋ผ์ ์๋๋ก ์ด๋
- ๊ฒ์์ ๋ชฉํ๋ 1๋ฒ ์นธ์์ ์์ํด์ 100๋ฒ ์นธ์ ๋์ฐฉํ๋ ๊ฒ
- ์ ๋ณด๋ ๊ฒ์์์ 100๋ฒ ์นธ์ ๋์ฐฉํ๊ธฐ ์ํด ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค์ผ ํ๋ ํ์์ ์ต์๊ฐ ๊ตฌํ๊ธฐ
์ ๋ ฅ
- ๊ฒ์ํ์ ์๋ ์ฌ๋ค๋ฆฌ์ ์ N(1 ≤ N ≤ 15), ๋ฑ์ ์ M(1 ≤ M ≤ 15)
- ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ฌ๋ค๋ฆฌ ์ ๋ณด x, y (x < y)
- x๋ฒ ์นธ์ ๋์ฐฉํ๋ฉด y๋ฒ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ ์๋ฏธ
- ๋ค์ M๊ฐ์ ์ค์ ์ฌ๋ค๋ฆฌ ์ ๋ณด u, v (u > v)
- u๋ฒ ์นธ์ ๋์ฐฉํ๋ฉด v๋ฒ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ ์๋ฏธ
- 1๋ฒ ์นธ๊ณผ 100๋ฒ ์นธ์ ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ์ ์์ ๋๋ ๋์ด ์๋
- ๋ชจ๋ ์นธ์ ์ต๋ ํ๋์ ์ฌ๋ค๋ฆฌ ๋๋ ๋ฑ์ ๊ฐ์ง ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ ์์
- ํญ์ 100๋ฒ ์นธ์ ๋์ฐฉํ ์ ์๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง
์ถ๋ ฅ
- 100๋ฒ ์นธ์ ๋์ฐฉํ๊ธฐ ์ํด ๊ตด๋ ค์ผ ํ๋ ์ฃผ์ฌ์ ํ์์ ์ต์๊ฐ
ํ์ด ๋ฐฉ๋ฒ ์๊ฐํด๋ณด๊ธฐ
์ผ์ข ์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ก, bfs๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ดํ ์ ์๋ค.
๋ณด๋ํ์ ๊ฐ ์นธ์ ์ ์ , ๊ฐ ์นธ์์ ์ด๋ํ ์ ์๋ ๋ค๋ฅธ ์นธ๊น์ง์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ด ๋, ๊ฐ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ํด๋น ์นธ์ ๋ฒํธ์ 1๋ถํฐ 6๊น์ง๋ฅผ ๋ํ ๋ฒํธ์ ์นธ์ผ๋ก ์ด๋ํ๊ฑฐ๋, ๋ฑ ํน์ ์ฌ๋ค๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๐์ฝ๋ ์ค๊ณํ๊ธฐ
- ์ฌ๋ค๋ฆฌ์ ์ N๊ณผ ๋ฑ์ ์ M์ ์ ๋ ฅ๋ฐ๋๋ค.
- ํน์ ์นธ์์ ๋ฑ ํน์ ์ฌ๋ค๋ฆฌ๋ก ์ด๋ํ ์ ์๋ ๋ค๋ฅธ ์นธ์ ์ ์ฅํ ๋ฆฌ์คํธ ways๋ฅผ ์์ฑํ์ฌ ๋ชจ๋ ์์๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ถ๋ฐ ์นธ, ๋์ฐฉ ์นธ ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ways[์ถ๋ฐ ์นธ ๋ฒํธ]์ ๋์ฐฉ ์นธ ๋ฒํธ๋ฅผ ํ ๋นํ๋ค.
- ๊ฐ ์นธ์ ๋์ฐฉํ์ ๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ํ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ dice_cnts๋ฅผ ์์ฑํด ๋ชจ๋ ์์๋ฅผ 100์ผ๋ก ์ด๊ธฐํํ๋ค.
- collections.deque๋ฅผ ์ฌ์ฉํด ๋น ํ q๋ฅผ ์์ฑํ๊ณ , ์ถ๋ฐ์นธ์ธ 1์ ์ฝ์ ํ dice_cnts[1]์ 0์ ํ ๋นํ๋ค.
- q๊ฐ ๋น ๋๊น์ง ์๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- q์์ ๋งจ ์ ์์ num์ ๊บผ๋ธ๋ค.
- ways[num]์ด 0์ด ์๋๋ผ๋ฉด, next_num์ ways[num]์ด ๋๋ค. ์ดํ dice_cnts[next_num] > dice_cnts[num]์ด๋ผ๋ฉด dice_cnts[next_num]์ dice_cnts[num]์ ํ ๋นํ๊ณ q์ ways[num]์ ์ฝ์ ํ๋ค.
- ways[num]์ด 0์ด๋ผ๋ฉด, num์ 1๋ถํฐ 6๊น์ง ๊ฐ๊ฐ ๋ํ ๊ฐ์ด 100์ ๋์ง ์๋๋ค๋ฉด ํด๋น ๊ฐ์ด next_num์ด ๋๋ค. ์ดํ dice_cnts[next_num] > dice_cnts[num]+1์ด๋ผ๋ฉด dice_cnts[next_num]์ dice_cnts[num]+1์ ํ ๋นํ๊ณ q์ next_num์ ์ฝ์ ํ๋ค.
- dice_cnts[100]์ ์ถ๋ ฅํ๋ค.
๐์๋ ํ์ฐจ ์์ ์ฌํญ
์ฒ์์๋ ํน์ ์นธ์ ๋๋ฌํ๊ธฐ ์ํ ์ฃผ์ฌ์ ํ์์ ์ต์๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ์นธ์ ๋๋ฌํ๊ธฐ ์ํ ์ฃผ์ฌ์ ํ์์ ์ต์๊ฐ์ด ์ํฅ์ ๋ฐ๋๋ค๋ ๊ฒ ๋๋ฌธ์ dp๋ก ํ์ดํ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ์์ ๋ฑ์ ๊ฒฝ์ฐ ์ด์ ์นธ์ผ๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์, ๋จ์ํ ํ์ฌ ์นธ๊น์ง์ ์ต์ ํ์๋ง์ผ๋ก ์ ์ฒด ๋ฌธ์ ์ ๋ํ ์ต์ ํด๋ฅผ ๊ตฌํ ์๊ฐ ์์๋ค. ์ด๋ฌํ ์ ๋๋ฌธ์ bfs๋ก ํ์ด๋ฅผ ๊ณ ์น๊ณ AC๋ฅผ ๋ฐ์๋ค.
๐์ ๋ต ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
ways = [0]*101
for _ in range(N+M):
start, end = map(int, input().split())
ways[start] = end
dice_cnts = [100]*101
q = deque([1])
dice_cnts[1] = 0
while q:
num = q.popleft()
if ways[num]:
next_num = ways[num]
if dice_cnts[next_num] > dice_cnts[num]:
dice_cnts[next_num] = dice_cnts[num]
q.append(next_num)
else:
for i in range(1,7):
next_num = num + i
if next_num <= 100 and dice_cnts[next_num] > dice_cnts[num]+1:
dice_cnts[next_num] = dice_cnts[num]+1
q.append(next_num)
print(dice_cnts[100])