๐ณ ๋งํฌ
๐ ๋ฌธ์
NรMํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ํํ๋๋ ๋ฏธ๋ก๊ฐ ์๋ค.
1 0 1 1 1 1
1 0 1 0 1 0
1 0 1 0 1 1
1 1 1 0 1 1
๋ฏธ๋ก์์ 1์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ด๊ณ , 0์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ธ๋ค. ์ด๋ฌํ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ก์ ๋, (1, 1)์์ ์ถ๋ฐํ์ฌ (N, M)์ ์์น๋ก ์ด๋ํ ๋ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ํ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ๋, ์๋ก ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค.
์์ ์์์๋ 15์นธ์ ์ง๋์ผ (N, M)์ ์์น๋ก ์ด๋ํ ์ ์๋ค. ์นธ์ ์ ๋์๋ ์์ ์์น์ ๋์ฐฉ ์์น๋ ํฌํจํ๋ค.
๐พ ํ์ด ๋ฐฉ๋ฒ
- n,m๊ณผ miro๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐ์์ค๋ค.
- ์ด๋, miro์ ๋ค์ด์ค๋ ๊ฐ๋ค์ ์ซ์๊ฐ ๋ถ์ด์ ๋ค์ด์ค๋ฏ๋ก str์ผ๋ก ๋ฐ์ ์ฑ listํ ํ์ฌ ์ด์ฉํ๋ ๊ฒ์ด ํธํ๋ค.
- (0,0)๋ถํฐ ์์ํ์ฌ ์ด์ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๋ค.
- ๋ฐฉ๋ฌธํ ๋, visit ๋ฐฐ์ด์ ๊ฐ์ ์ด์
visit ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ + 1์ ํด์ค๋ค.
- ์ด์ ๋, ์๊ฐ ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์์ด๋ค. ๋ค์ ์ ์ผ ์ฒ์์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ด ์๋ ์ด์ ๊ฐ์ +1์ ํจ์ผ๋ก์จ ์ต์ข (n-1,m-1)์ ๋๋ฌํ์์ ๋ ์ต์๊ฐ์ visit ๋ฐฐ์ด์ ์ ์ฅํ ์ ์๋ค.
solution ์ฝ๋
- bfs๋ก solveํ ์ฝ๋
import sys sys.setrecursionlimit(10**8) sys.stdin = open("input.txt","rt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
n,m = [int(x) for x in sys.stdin.readline().split()]
answer = n*m + 1
visit = [[0] * m for _ in range(n)]
visit[0][0] = 1
miro = [list(sys.stdin.readline().strip()) for _ in range(n)]
q = []
q.append((0,0))
while q:
x, y = q.pop(0)
if x == n-1 and y == m-1:
print(visit[x][y])
sys.exit()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if visit[nx][ny] == 0 and miro[nx][ny] == '1':
visit[nx][ny] = visit[x][y] + 1
q.append((nx,ny))
2. dfs๋ก ์๊ฐ์ด๊ณผ ์ฝ๋
bfs๋ก ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ณด๋ฉฐ ๋ ์๊ฐ์ด, (n,m)๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก dfs์ฒ๋ผ ์ฒ์๋ถํฐ (n,m)๊น์ง ๋๋ฌํ ๋ค ๋ค๋ก ๋น ์ ธ๋์ค๋ฉฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ๋ณด๋ค๋ bfs์ฒ๋ผ ์ด์ ๋
ธ๋๋ค์ ๋ชจ๋ ํ์ํ์ฌ visit์ ๊ฒฝ๋ก ๊ฐ์ ๋์ ํ ๋ค, ์ต์ข
๋๋ฌํ์ ๋ visit[n-1][m-1]์ ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๊ณ , ์ ํํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
```python3
import sys
sys.setrecursionlimit(10**8)
sys.stdin = open("input.txt","rt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def dfs(x,y, cnt):
global answer
if x == n-1 and y == m-1:
answer = cnt if answer > cnt else answer
else:
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and visit[nx][ny] == 0 and miro[nx][ny] == '1':
visit[nx][ny] = 1
dfs(nx,ny,cnt+1)
visit[nx][ny] = 0
n,m = [int(x) for x in sys.stdin.readline().split()]
answer = n*m + 1
visit = [[0] * m for _ in range(n)]
visit[0][0] = 1
miro = [list(sys.stdin.readline().strip()) for _ in range(n)]
# miro = [sys.stdin.readline().rstrip() for _ in range(n)]
dfs(0,0,1)
print(answer)