โ๋ฌธ์
https://www.acmicpc.net/problem/16928
๋ฉ๋ชจ๋ฆฌ: 34968 KB, ์๊ฐ: 60 ms
๋๋น ์ฐ์ ํ์, ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์
๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์์ ์ฆ๊ฒจ ํ๋ ํ๋ธ๋ฌ๋ฒ๋ ์ด๋ ๋ ๊ถ๊ธํ ์ ์ด ์๊ฒผ๋ค.
์ฃผ์ฌ์๋ฅผ ์กฐ์ํด ๋ด๊ฐ ์ํ๋ ์๊ฐ ๋์ค๊ฒ ๋ง๋ค ์ ์๋ค๋ฉด, ์ต์ ๋ช ๋ฒ๋ง์ ๋์ฐฉ์ ์ ๋์ฐฉํ ์ ์์๊น?
๊ฒ์์ ์ ์ก๋ฉด์ฒด ์ฃผ์ฌ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์๋ 1๋ถํฐ 6๊น์ง ์๊ฐ ํ๋์ฉ ์ ํ์๋ค. ๊ฒ์์ ํฌ๊ธฐ๊ฐ 10×10์ด๊ณ , ์ด 100๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ ๋ณด๋ํ์์ ์งํ๋๋ค. ๋ณด๋ํ์๋ 1๋ถํฐ 100๊น์ง ์๊ฐ ํ๋์ฉ ์์๋๋ก ์ ํ์ ธ ์๋ค.
ํ๋ ์ด์ด๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค ๋์จ ์๋งํผ ์ด๋ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ์ด์ด๊ฐ i๋ฒ ์นธ์ ์๊ณ , ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค ๋์จ ์๊ฐ 4๋ผ๋ฉด, i+4๋ฒ ์นธ์ผ๋ก ์ด๋ํด์ผ ํ๋ค. ๋ง์ฝ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ๊ฐ 100๋ฒ ์นธ์ ๋์ด๊ฐ๋ค๋ฉด ์ด๋ํ ์ ์๋ค. ๋์ฐฉํ ์นธ์ด ์ฌ๋ค๋ฆฌ๋ฉด, ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๋ฑ์ด ์๋ ์นธ์ ๋์ฐฉํ๋ฉด, ๋ฑ์ ๋ฐ๋ผ์ ๋ด๋ ค๊ฐ๊ฒ ๋๋ค. ์ฆ, ์ฌ๋ค๋ฆฌ๋ฅผ ์ด์ฉํด ์ด๋ํ ์นธ์ ๋ฒํธ๋ ์๋ ์๋ ์นธ์ ๋ฒํธ๋ณด๋ค ํฌ๊ณ , ๋ฑ์ ์ด์ฉํด ์ด๋ํ ์นธ์ ๋ฒํธ๋ ์๋ ์๋ ์นธ์ ๋ฒํธ๋ณด๋ค ์์์ง๋ค.
๊ฒ์์ ๋ชฉํ๋ 1๋ฒ ์นธ์์ ์์ํด์ 100๋ฒ ์นธ์ ๋์ฐฉํ๋ ๊ฒ์ด๋ค.
๊ฒ์ํ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, 100๋ฒ ์นธ์ ๋์ฐฉํ๊ธฐ ์ํด ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค์ผ ํ๋ ํ์์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
โ๐ปํ์ด
์ด ๋ฌธ์ ๋ BFS๋ก ํ๋ฉด ๋๋ค.
์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ฌ์ ํ์ผ๋ก ์ ์ฅํ๋ค. ์ฌ์ ํ์ผ๋ก ์ ์ฅํ๋ ํธ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ค.
์ถ๋ฐ์ง๊ฐ 1์ด๋ผ๊ณ ํ์์ผ๋ฏ๋ก ํ์ 1์ ๋ฃ์ด์ฃผ๊ณ ๊ทธ ๋ค์๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฌ๋ฉด ๋๋ค. cnt ๊ฐ์ ๊ฐ์ด ํ์ ๋ฃ์ ์ ์์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ก ์คํจํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ while q ์์ q ๊ธธ์ด ๋งํผ ๋ฐ๋ณตํ ํ cnt + 1์ ํ๋ค.
1์ผ ๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ ์ ์๋ ์์น๋ 2, 3, 4, 5, 6, 7 ์ด๋ค. ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ํ์๋ ์ด๋ ์์น๋ ๊ฒฐ๊ตญ 1์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฅผ ํ์ ์ ์ฅํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค. ๋ฐ๋ณต๋ฌธ์ ๋ฒ์ด๋ฌ์ ๋ 1 ์ฆ๊ฐํ๋ ํธ์ด ๋ ๋ซ๋ค.
์ ๋ฐฉ์์ ๋ฐ๋ณตํ์ฌ 100์ ๋์ฐฉํ๋ฉด ๊ทธ ๋์ cnt๋ฅผ ์ถ๋ ฅํ ํ ํจ์๋ฅผ ๋ฐํํ๋ฉด์ ๋๋ธ๋ค.
๐ป์ฝ๋
์ฒ์ ์๋ํ ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split()) # N -> ์ฌ๋ค๋ฆฌ ์, M -> ๋ฑ ์
ladders = [list(map(int, input().split())) for _ in range(N)]
snakes = [list(map(int, input().split())) for _ in range(M)]
def bfs():
global res
q = deque()
q.append((1, 0))
while q:
cur, cnt = q.popleft()
for i in range(N):
if ladders[i][0] == cur:
cur = ladders[i][1]
for i in range(M):
if snakes[i][0] == cur:
cur = snakes[i][1]
for i in range(1, 7):
nx = cur + i
if nx == 100:
res = cnt + 1
return
if nx < 100:
q.append((nx, cnt + 1))
res = cnt + 1
res = 0
bfs()
print(res)
โก๏ธ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ก ์คํจ
์ ๋ต ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split())
ladders = {}
for _ in range(N):
x, y = map(int, input().split())
ladders[x] = y
snakes = {}
for _ in range(M):
x, y = map(int, input().split())
snakes[x] = y
def dfs():
visited = [0] * 101
visited[1] = 1
q = deque()
q.append(1)
cnt = 0
while q:
l = len(q)
for _ in range(l):
cur = q.popleft()
if cur == 100:
print(cnt)
return
for i in range(1, 7):
nx = cur + i
if nx <= 100 and not visited[nx]:
visited[nx] = 1
if nx in ladders.keys():
visited[ladders[nx]] = 1
q.append(ladders[nx])
elif nx in snakes.keys():
visited[snakes[nx]] = 1
q.append(snakes[nx])
else:
q.append(nx)
cnt += 1
dfs()
๐ํ๊ธฐ
๋ญ๊ฐ ๊ทธ๋ฅ ๋ฆฌ์คํธ๋ก ํธ๋ ๊ฒ ๋น์ฐํ๋ค๊ณ ์๊ฐํ๋๋ฐ ์์ผ๋ก python์ผ๋ก ํ ๋ ๋ฉ๋ชจ๋ฆฌ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ถฉ๋ถํ ๊ณ ๋ฏผ์ ํด๋ด์ผ๊ฒ ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 7569. ํ ๋งํ /Python - Gold5 (1) | 2025.02.09 |
---|---|
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ๋ฐฐ์ถ/Python - Silver 2 (0) | 2025.02.06 |
[๋ฐฑ์ค] 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ/Python - Silver 1 (0) | 2025.02.05 |
[๋ฐฑ์ค] 24480. ์๊ณ ๋ฆฌ์ฆ ์์ - ๊น์ด ์ฐ์ ํ์ 2/Python - Silver 2 (0) | 2025.02.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ/Python - Lv.2 (0) | 2025.01.27 |