1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ URL: https://www.acmicpc.net/problem/2189
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ๋ฏธ๋ก์์ ์ถ๋ฐ์ (0, 0)์์ ์์ํ์ฌ ๋์ฐฉ์ (N-1, M-1)๊น์ง ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ๋ฏธ๋ก๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ํํ๋๋ฉฐ, 1์ ์ด๋ ๊ฐ๋ฅํ ๊ธธ์, 0์ ์ด๋ํ ์ ์๋ ๋ฒฝ์ ๋ํ๋ ๋๋ค. ์ํ์ข์ฐ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ต๋จ ๊ฒฝ๋ก์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค. BFS(๋๋น ์ฐ์ ํ์)๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ ์์ผ๋ฉฐ, ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
2. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
from collections import deque
# N: ๋ฏธ๋ก์ ํ ๊ฐ์, M: ๋ฏธ๋ก์ ์ด ๊ฐ์
N, M = map(int, input().split())
# miro: ๋ฏธ๋ก์ ์ํ๋ฅผ ์ ์ฅํ 2์ฐจ์ ๋ฆฌ์คํธ
miro = []
for _ in range(N):
# ๊ฐ ์ค์ ๋ฏธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ฆฌ์คํธ๋ก ์ ์ฅ
miro.append(list(map(int, input().rstrip())))
# dx, dy: ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ํ๋ด๋ ๋ฆฌ์คํธ
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
# chk: ๊ฐ ์์น๊น์ง์ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ 2์ฐจ์ ๋ฆฌ์คํธ, ์ด๊ธฐ๊ฐ์ ๋งค์ฐ ํฐ ๊ฐ (sys.maxsize)์ผ๋ก ์ค์
chk = [[sys.maxsize] * M for _ in range(N)]
# ์์ ์์น (0,0)์ ๊ฑฐ๋ฆฌ ์ด๊ธฐํ
chk[0][0] = 1
# BFS๋ฅผ ์ํ ํ ์ด๊ธฐํ, ์์ ์์น์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ์ฝ์
q = deque()
q.append((0, 0, chk[0][0]))
# BFS (๋๋น ์ฐ์ ํ์) ์์
while q:
# ํ์ฌ ์์น์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์์ ๊บผ๋
x, y, d = q.popleft()
# ๋ค ๋ฐฉํฅ์ผ๋ก ์ด๋ ๊ฐ๋ฅํ์ง ํ์ธ
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ์ด๋ํ ์์น๊ฐ ๋ฏธ๋ก์ ๋ฒ์ ๋ด์ ์๊ณ , ์ด๋ํ ์ ์๋ ๊ธธ(1)์ด๋ฉฐ,
# ์ง๊ธ๊น์ง ๊ธฐ๋ก๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ์งง์ ๊ฑฐ๋ฆฌ๋ก ๋๋ฌํ ์ ์๋ค๋ฉด
if nx >= 0 and nx < N and ny >= 0 and ny < M \
and miro[nx][ny] == 1 and chk[nx][ny] > d + 1:
# ์๋ก์ด ์ต์ ๊ฑฐ๋ฆฌ๋ก ์
๋ฐ์ดํธํ๊ณ , ํ์ ์ถ๊ฐํ์ฌ ๋ค์ ํ์์ ์งํ
chk[nx][ny] = d + 1
q.append((nx, ny, d + 1))
# ๋์ฐฉ ์ง์ (N-1, M-1)๊น์ง์ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
print(chk[N-1][M-1])
3. ์ฝ๋ ์ค๋ช
1) ๋ณ์ ์ด๊ธฐํ
- miro: ์ ๋ ฅ๋ฐ์ ๋ฏธ๋ก๋ฅผ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํฉ๋๋ค.
- chk: ๊ฐ ์์น๊น์ง์ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ 2์ฐจ์ ๋ฆฌ์คํธ์ ๋๋ค. ์ด๊ธฐ๊ฐ์ ๋งค์ฐ ํฐ ๊ฐ์ธ sys.maxsize๋ก ์ค์ ํ์ฌ ์ด๊ธฐ์๋ ์ด๋ค ์์น๋ ๋ฐฉ๋ฌธํ์ง ์์์์ ๋ํ๋ ๋๋ค.
2) ๋ณด๋ ํ์ ๋ฐ ๋ณํ ์ํ
- BFS(๋๋น ์ฐ์ ํ์)๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ฐ์ ์์ ์์ํ์ฌ ์ํ์ข์ฐ๋ก ์ด๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํฉ๋๋ค.
- ํ๋ฅผ ์ด์ฉํด ํ์ํ๋ฉฐ, ๊ฐ ์์น์ ๋๋ฌํ์ ๋์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋, ๋ ์งง์ ๊ฒฝ๋ก๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๊ทธ ๊ฒฝ๋ก๋ก ์ ๋ฐ์ดํธํ๊ณ ํ์ ์ถ๊ฐํฉ๋๋ค.
3) ๋์ฐฉ ์ง์ ๊น์ง์ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ ์ถ๋ ฅ
- BFS๊ฐ ์ข ๋ฃ๋๋ฉด, ๋์ฐฉ ์ง์ (N-1, M-1)๊น์ง์ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ ์ ์ฅ๋ chk[N-1][M-1] ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
4. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python_Easy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2015[์๋ค์ ํฉ 4] (0) | 2024.08.24 |
---|---|
๋ฐฑ์ค 1343[ํด๋ฆฌ์ค๋ฏธ๋ ธ] (0) | 2024.08.14 |
๋ฐฑ์ค 2417[์ ์ ์ ๊ณฑ๊ทผ] (0) | 2024.08.09 |
๋ฐฑ์ค 1748[์ ์ด์ด ์ฐ๊ธฐ 1] (0) | 2024.08.09 |