본문 바로가기
Problem Solving/BOJ

[BOJ][Python]14940 풀이

by NoiB 2023. 7. 22.
반응형

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

 

14940번: 쉬운 최단거리

지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이

www.acmicpc.net

from collections import deque
import sys

ssr = sys.stdin.readline

def get_pos():
    for i in range(n):
        for j in range(m):
            if board[i][j] == 2:
                visited[i][j] = 0
                q.append((i, j, 0))
            elif board[i][j] == 0:
                visited[i][j] = 0

def bfs():
    while q:
        r, c, d = q.popleft()
        if 0 <= r-1:
            if visited[r-1][c] == -1:
                if board[r-1][c] == 1:
                    visited[r-1][c] = d+1
                    q.append((r-1, c, d+1))
                else:
                    visited[r-1][c] = 0
        if 0 <= c-1:
            if visited[r][c-1] == -1:
                if board[r][c-1] == 1:
                    visited[r][c-1] = d+1
                    q.append((r, c-1, d+1))
                else:
                    visited[r][c-1] = 0
        if r+1 < n:
            if visited[r+1][c] == -1:
                if board[r+1][c] == 1:
                    visited[r+1][c] = d+1
                    q.append((r+1, c, d+1))
                else:
                    visited[r+1][c] = 0
        if c+1 < m:
            if visited[r][c+1] == -1:
                if board[r][c+1] == 1:
                    visited[r][c+1] = d+1
                    q.append((r, c+1, d+1))
                else:
                    visited[r][c+1] = 0

n, m = map(int, ssr().split())
visited = [[-1 for _ in range(m)] for _ in range(n)]
board = [list(map(int, ssr().split())) for _ in range(n)]
q = deque([])
get_pos()
bfs()
for i in visited:
    print(*i)

별로 어렵지 않은 bfs 문제입니다. 신경 써볼만한 부분은 원래 갈 수 있는 곳이지만 갈 수 없게 됐을 경우 -1을 해줘야 한다는 부분일까요.

 

bfs 부분의 코드가 매우 길어지기 때문에 반복문을 사용해서 좀 더 줄여볼 수도 있겠네요.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]21736 풀이  (0) 2023.07.24
[BOJ][Python]20529 풀이  (0) 2023.07.23
[BOJ][Python]18110 풀이  (0) 2023.07.20
[BOJ][Python]1283 풀이  (0) 2023.07.20