songining
article thumbnail

๋ง๊ทธ๋Œ€๋กœ ๋ฏธ๋กœํƒ์ƒ‰ ๋ฌธ์ œ์˜€๋‹ค. 1,1์—์„œ n,m๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค. 

์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— BFS๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

from collections import deque


def bfs(v):
    queue.append((0, 0))

    dx = [0, 0, 1, -1]
    dy = [1, -1, 0, 0]

    while queue:
        x, y = queue.popleft()
        for i in range(4):  # ์ž์‹๋…ธ๋“œ ํ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•จ
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx < n and 0 <= ny < m:
                if visit[nx][ny] == False and matrix[nx][ny] == 1:
                    queue.append((nx, ny))
                    visit[nx][ny] = True
                    result[nx][ny] = result[x][y] + 1


n, m = map(int, input().split())
matrix = [list(map(int, input())) for _ in range(n)]
visit = [[False] * m for _ in range(n)]
queue = deque()
result = [[1] * m for _ in range(n)]
#print(matrix)
bfs(0)
print(result[ n- 1][m - 1])

 

bfs๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— deque ๋ฅผ ์ด์šฉํ•ด์ฃผ์—ˆ๋‹ค. 

ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๋ฅผ ํŠœํ”Œ๋กœ ์ €์žฅํ•˜์—ฌ ํƒ์ƒ‰ํ• ๋•Œ popํ•œ๋‹ค. ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์ „๋ถ€ ๋ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ dx,dy๋ฅผ ๋งŒ๋“ค๊ณ  for๋ฌธ์„ 4๋ฒˆ ๋Œ๋ ค ์–‘์˜†,์œ„์•„๋ž˜์ค‘ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ์žˆ๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์นธ ์ˆ˜๋ฅผ ์„ธ์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— result์— ์ด๋™ ์ „ ์นธ ์ˆ˜ +1์„ ์ €์žฅํ•ด์ค€๋‹ค. 

์ด๋Ÿฌํ•œ์‹์œผ๋กœ ๋๊นŒ์ง€ ๋Œ๊ณ  n-1,m-1 ์ž๋ฆฌ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (๋ฐฐ์—ด์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ)