2021. 1. 12. 22:09ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
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(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅํ์
์ฒซ์งธ ์ค์ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ๋์ฐฉ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
๊ธฐ์กด์ ํ์๋ BFS์๋ ์กฐ๊ธ ์คํ์ผ์ด ๋ค๋ฅธ ๋ฌธ์ ์๋ค. ์ต๋จ๊ฒฝ๋ก์ ๊ด๋ จ๋ ๋ฌธ์ ์๋๋ฐ BFS์ ํ์์ ๋๊ฐ์ง๋ง BFS ์กฐ๊ฑด๋ฌธ์์์ queue์ ์ขํ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํด์ผํ๋ฏ๋ก maps[new_x][new_y]์ maps[i][j] +1์ ๋ํด์ฃผ์๋ค. ์ถ๋ ฅ์์๋ ๋์ฐฉ์์น๋ (n-1,m-1)์ด๋ฏ๋ก maps[n-1][m-1]์ ์ ์ฅ๋ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
from collections import deque
from sys import stdin
def bfs(x, y):
dxy = [(1, 0), (0, 1), (-1, 0), (0, -1)]
queue = deque([(x, y)])
while queue:
item = queue.popleft()
for xy in dxy:
new_x = int(xy[0] + item[0])
new_y = int(xy[1] + item[1])
if 0 <= new_x < n and 0 <= new_y < m and check[new_x][new_y] != 1 and maps[new_x][new_y] == '1':
queue.append((new_x, new_y))
maps[new_x][new_y] = int(maps[item[0]][item[1]]) + 1
check[new_x][new_y] = 1
n, m = map(int, stdin.readline().split())
check = [[0 for _ in range(m)] for _ in range(n)]
maps = []
for _ in range(n):
tmp_map = list(stdin.readline())
tmp_map.remove('\n')
maps.append(tmp_map)
bfs(0, 0)
print(maps[n - 1][m - 1])
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ๋ฐฑ์ค 7576] ํ ๋งํ (0) | 2021.01.17 |
---|---|
[Python - ๋ฐฑ์ค 1012] ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2021.01.12 |
[Python - ๋ฐฑ์ค 2667] ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (0) | 2021.01.12 |