๋ง๊ทธ๋๋ก ๋ฏธ๋กํ์ ๋ฌธ์ ์๋ค. 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๋ถํฐ ์์ํ๋ฏ๋ก)
'ALGORITHM' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ๋ฃจ์ค์นผ / ํ๋ฆผ / ๋ค์ต์คํธ๋ผ (0) | 2021.01.14 |
---|---|
ํธ๋ฆฌ ๊น์ด ๊ตฌํ๋ ๋ฐฉ์ (0) | 2021.01.12 |
[DFS/BFS] ๋ฐฑ์ค 1260 ๋ฌธ์ ํ์ด (0) | 2020.10.26 |
[์ด์งํ์] programmers ์ ๊ตญ ์ฌ์ฌ ๋ฌธ์ ํ์ด (0) | 2020.10.11 |
[TSP] ๋ฐฑ์ค 10971 ๋ฌธ์ ํ์ด (0) | 2020.09.19 |