본문 바로가기

스터디 1일 1커밋

240408 [BOJ/백준] 14940. 쉬운 최단거리

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


나의 코드

# 쉬운 최단거리

n, m = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
visited = [[0]*m for _ in range(n)]
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
depth = 0
q = []

for i in range(n):
    for j in range(m):
        if arr[i][j] == 2:
            q.append([i, j])
            visited[i][j] = 1
            arr[i][j] = 0
while q:
    x, y = q.pop(0)
    for k in range(4):
        ni = x + di[k]
        nj = y + dj[k]
        if 0 <= ni < n and 0 <= nj < m and arr[ni][nj] == 1 and visited[ni][nj] == 0:
            q.append([ni, nj])
            visited[ni][nj] = 1
            arr[ni][nj] = arr[x][y] + 1

for i in range(n):
    for j in range(m):
        if arr[i][j] == 1 and visited[i][j] == 0:  # 갈 수 있는 길인데 방문못하는 곳은 -1
            arr[i][j] = -1

for i in arr:
    print(*i)

 

결과


문제 제대로 안읽고 갈 수 있는 땅인데 방문 못하는 곳은 -1로 출력해야 하는 부분을 놓쳤다. 그 부분을 추가하니 성공!