[Python - ๋ฐฑ์ค€ 2178] ๋ฏธ๋กœ ํƒ์ƒ‰

2021. 1. 12. 22:09ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•
 

2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

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])

 

 

 

 

๋ฐ˜์‘ํ˜•