๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 2178: ๋ฏธ๋กœ ํƒ์ƒ‰ (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 2178: ๋ฏธ๋กœ ํƒ์ƒ‰ (Python)

adorableco 2023. 3. 14. 03:51
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://www.acmicpc.net/problem/2178

 

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

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

www.acmicpc.net

 

 

์ฝ”๋“œ

import sys
from collections import deque

def bfs(x,y):
    queue = deque()
    queue.append((x,y))

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if nx<0 or nx>=n or ny<0 or ny>=m:
                continue
            if graph[nx][ny] == 0:
                continue
            if  graph[nx][ny] == 1:
                graph[nx][ny] = graph[x][y] + 1
                queue.append((nx,ny))
    return graph[n-1][m-1]

n, m = map(int, input().split())
graph = []
for i in range(n):
    graph.append(list(map(int, input())))

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

print(bfs(0,0))

 

ํ’€์ด

bfs๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. (0,0) ์œ„์น˜๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜์—ฌ ์ƒํ•˜์ขŒ์šฐ์— ์žˆ๋Š” ๊ฐ’์ด 1์ด๋ผ๋ฉด, ์ฆ‰ ์•„์ง ์ง€๋‚˜๊ฐ€์ง€ ์•Š์•˜๊ณ  ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๋ผ๋ฉด ๊ทธ ๊ฐ’์— ์ด๋•Œ๊นŒ์ง€ ์˜จ ๊ฒฝ๋กœ์˜ + 1 ์„ ํ•œ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์˜ ์ขŒํ‘œ ๊ฐ’์„ ํ์— ๋‹ด๋Š”๋‹ค.

ํ์— ๋‚จ๋Š”๊ฒŒ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ณ  ๋‚˜๋ฉด graph[n-1][m-1] ( (0,0)๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ๊ฐ€์žฅ ์•„๋ž˜์˜ ์ขŒํ‘œ๋Š” (n-1, m-1)์ด๋‹ค. )์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฐ’์ด ์ตœ์†Œ ๊ฒฝ๋กœ ๊ฐ’์œผ๋กœ ์ •๋‹ต์ด๋‹ค. 

 

๋ฐ˜์‘ํ˜•