ํ’€์ด


[0][0] ์—์„œ [n-1][m-1] ์ขŒํ‘œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— BFS ๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.

์ด์ œ ๊ธฐ๋ณธ์ ์ธ BFS ๊ตฌ์กฐ๋Š” ์ดํ•ดํ–ˆ๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฉด์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€œ์•„๊ธฐ์ƒ์–ดโ€ ๋ฌธ์ œ์—์„œ ํ™œ์šฉํ–ˆ๋˜ dist ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฏธ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ ์ขŒํ‘œ๋ณ„ ์‹œ์ž‘์ ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

์‹œ์ž‘์ ์—์„œ BFS ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ชจ๋“  ํƒ์ƒ‰์ด ๋๋‚œ ํ›„ dist[n-1][m-1] ์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# ๋ฏธ๋กœ ํƒ์ƒ‰
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs(i, j):
    q = deque()
    q.append([i, j])
    graph[i][j] = 0  # ์‹œ์ž‘ ์  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    dist[i][j] = 1
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < n and 0 <= ny < m:  # ๋ฒ”์œ„ ๋‚ด์ผ ๋•Œ
                if graph[nx][ny] == 1:  # ํ†ต๋กœ์ผ ๊ฒฝ์šฐ
                    q.append([nx, ny])
                    graph[nx][ny] = 0  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
                    dist[nx][ny] = dist[x][y] + 1  # ์ขŒํ‘œ๋ณ„ ๊ฑฐ๋ฆฌ ์ €์žฅ
    return dist[n-1][m-1]
 
 
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
 
n, m = map(int, input().split())
graph = [list(map(int, input().rstrip())) for _ in range(n)]
dist = [[0] * m for _ in range(n)]
 
print(bfs(0, 0))

References