1) ๋ฌธ์
- ์์ฒ๋ผ N×Mํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ํํ๋๋ ๋ฏธ๋ก๊ฐ ์๋ค.
- ๋ฏธ๋ก์์ 1์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ด๊ณ , 0์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ธ๋ค.
- ์ด๋ฌํ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ก์ ๋, (1, 1)์์ ์ถ๋ฐํ์ฌ (N, M)์ ์์น๋ก ์ด๋ํ ๋ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ํ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ๋, ์๋ก ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค.
- ์์ ์์์๋ 15์นธ์ ์ง๋์ผ (N, M)์ ์์น๋ก ์ด๋ํ ์ ์๋ค. ์นธ์ ์ ๋์๋ ์์ ์์น์ ๋์ฐฉ ์์น๋ ํฌํจํ๋ค.
2) ์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
3) ์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ๋์ฐฉ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
4) ์ ๋ ฅ, ์ถ๋ ฅ ์์
[์
๋ ฅ]
4 6
101111
101010
101011
111011
[์ถ๋ ฅ]
15
5) ํ์ด
from collections import deque
def isInRange(row, col, max_row, max_col):
return (0 <= row < max_row) and (0 <= col < max_col)
def shortestPath(grid, N, M):
max_row = len(grid)
max_col = len(grid[0])
visited = [[False] * max_col for _ in range(max_row)]
directions = ((-1, 0), (1, 0), (0, -1), (0, 1))
q = deque()
q.append((0, 0, 1))
visited[0][0] = True
while q:
cur_row, cur_col, cur_dist = q.popleft()
if cur_row == N-1 and cur_col == M-1:
return cur_dist
for dr, dc in directions:
next_row = cur_row + dr
next_col = cur_col + dc
if isInRange(next_row, next_col, max_row, max_col):
if grid[next_row][next_col] == 1 and not visited[next_row][next_col]:
q.append((next_row, next_col, cur_dist + 1))
visited[next_row][next_col] = True
N, M = map(int, input().split())
grid = []
for _ in range(N):
data = input()
L = []
for c in data:
L.append(int(c))
grid.append(L)
print(shortestPath(grid, N, M))
[Reference]
๋ฐ์ํ
'๐ฏ Coding Test > ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค (Lv 2) - ๊ธฐ๋ฅ๊ฐ๋ฐ (1) | 2023.08.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค (Lv 2) - ํ๋ก์ธ์ค (1) | 2023.08.16 |
ํ๋ก๊ทธ๋๋จธ์ค (Lv 0) - ์น์์ด (1) (1) | 2023.08.16 |
ํ๋ก๊ทธ๋๋จธ์ค (Lv 0) - ์ ์๋ฅผ ๋์ ํ์ผ๋ก ๋ฐฐ์นํ๊ธฐ (2) | 2023.08.16 |
๋ฐฑ์ค 1260๋ฒ - DFS์ BFS (1) | 2023.08.14 |