DevYoon
[๋ฐฑ์ค] 16928. ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (Python) ๋ณธ๋ฌธ
link ๐ https://www.acmicpc.net/problem/16928
๐ ์ฌ๋ค๋ฆฌ๋ ๋ฑ์ ๋ง๋๋ฉด ์์น์ ๋ณํ๊ฐ ์ผ์ด๋จ
๐ 1์์ ์ถ๋ฐํ์ฌ 100์ ๋์ฐฉํ๊ธฐ๊น์ง ์ฃผ์ฌ์๋ฅผ ์ต์๋ก ๊ตด๋ฆด ๋๋ฅผ ์ฐพ๋ ๋ฌธ์
๐ ๊ฐ๋จํ BFS ๋ฌธ์ ๋ก, ์ด๋ํ ์นธ์ด ์ฌ๋ค๋ฆฌ๋ ๋ฑ์ด ์กด์ฌํ๋์ง ํธํ๊ฒ ํ์ํ๊ธฐ ์ํด ๋์ ๋๋ฆฌ๋ก ์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
import sys
from collections import deque
def BFS():
q = deque()
q.append((1, 0))
visit = [0]*101 # ๋ฐฉ๋ฌธ ์ฒดํฌ
visit[1] = 1
while q:
now, cnt = q.popleft()
if now == 100: # 100์ ๋๋ฌํ๋ฉด cnt ์ถ๋ ฅ
return cnt
for num in range(1, 7): # 1๋ถํฐ 6๊น์ง ์ฃผ์ฌ์
tmp = now+num
if tmp <= 100: # 100 ์ด๊ณผํ๋ฉด ์ด๋ ๋ถ๊ฐ๋ฅ
if visit[tmp]: continue # ๋ฐฉ๋ฌธํ ์ ์์ผ๋ฉด ์ดํ ๋ก์ง ์ฒ๋ฆฌ X
if tmp in ladder.keys(): # ์ฌ๋ค๋ฆฌ ์์ ์ง์ ์ ์ด๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด
visit[tmp] = 1 # ์ด๋ ๊ฒฐ๊ณผ์ ๋ฐฉ๋ฌธ ์ฒดํฌ
visit[ladder[tmp]] = 1 # ์ฌ๋ค๋ฆฌ ํ๊ณ ์ฌ๋ผ๊ฐ ๊ณณ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ
q.append((ladder[tmp], cnt+1)) # q์ append
elif tmp in snake.keys(): # ๋ฑ ์์ ์ง์ ์ ์ด๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด
visit[tmp] = 1 # ์ด๋ ๊ฒฐ๊ณผ์ ๋ฐฉ๋ฌธ ์ฒดํฌ
visit[snake[tmp]] = 1 # ๋ฑ ํ๊ณ ๋ด๋ ค๊ฐ ๊ณณ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ
q.append((snake[tmp], cnt+1)) # q์ append
else:
visit[tmp] = 1
q.append((now+num, cnt+1))
input = sys.stdin.readline
N, M = map(int, input().split())
ladder = {}
snake = {}
# ์ถํ ํ์์ ์ํด ๋์
๋๋ฆฌ ํํ๋ก ์ ์ฅ
for _ in range(N):
start, end = map(int, input().split()) # ์ฌ๋ค๋ฆฌ ์์ ์ง์ , ๋ ์ง์
ladder[start] = end
for _ in range(M):
start, end = map(int, input().split()) # ๋ฑ ์์ ์ง์ , ๋ ์ง์
snake[start] = end
print(BFS())