[๋ฐฑ์ค€-14497] ์ฃผ๋‚œ์˜ ๋‚œ(้›ฃ) / Python

๐Ÿ“š Problem Solving/Baekjoon

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

 

14497๋ฒˆ: ์ฃผ๋‚œ์˜ ๋‚œ(้›ฃ)

์ฃผ๋‚œ์ด๋Š” ํฌ๊ฒŒ ํ™”๊ฐ€ ๋‚ฌ๋‹ค. ์ฑ…์ƒ ์„œ๋ž ์•ˆ์— ๋ชฐ๋ž˜ ๋จน์œผ๋ ค๊ณ  ์ˆจ๊ฒจ๋‘” ์ดˆ์ฝ”๋ฐ”๊ฐ€ ์‚ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฃผ๋‚œ์ด๋Š” ๋ฏธ์ณ ๋‚ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์‚ฌ์‹ค, ์ง„์งœ๋กœ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ‘์ฟต... ์ฟต...’ ์ฃผ๋‚œ์ด๋Š” ์ ํ”„์˜ ํŒŒ

www.acmicpc.net

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())
x1, y1, x2, y2 = map(int, input().split())
graph = []
for _ in range(n):
    graph.append(list(map(str, input().rstrip())))

distance = [[-1] * m for _ in range(n)]

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


def bfs(x, y):
    queue = deque()
    queue.append((x, y))
    distance[x][y] = 0
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and distance[nx][ny] == -1:
                if graph[nx][ny] == "1" or graph[nx][ny] == "#":
                    distance[nx][ny] = distance[x][y] + 1
                    queue.append((nx, ny))
                elif graph[nx][ny] == "0":
                    distance[nx][ny] = distance[x][y]
                    queue.appendleft((nx, ny))


bfs(x1 - 1, y1 - 1)

print(distance[x2 - 1][y2 - 1])

 

ํ•ด์„ค

bfs๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ๋‹ค. ์ ํ”„๋ฅผ ๋›ธ ๋•Œ๋งˆ๋‹ค 0์ด๋ฉด ์ด์ „ ๊ฐ’์œผ๋กœ, 1์ด๋ฉด ์ด์ „ ๊ฐ’์— +1 ๋กœ ๋ฐ”๋€๋‹ค.