[Level2] 게임 맵 최단거리

Quesuemon·2021년 3월 29일
0

코딩테스트 준비

목록 보기
30/111

🛠 문제

https://programmers.co.kr/learn/courses/30/lessons/1844


👩🏻‍💻 해결 방법

bfs를 사용해 쉽게 해결할 수 있는 문제였다
그러나 while문에서 조건을 구현해주는 과정이 조금 헷갈렸다

소스 코드

from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(maps, i, j, n, m):
    q = deque()
    q.append((i, j))
    
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 > nx or nx >= n or 0 > ny or ny >= m:
                continue
            if maps[nx][ny] == 0:
                continue
            if maps[nx][ny] == 1:
                maps[nx][ny] = maps[x][y] + 1
                q.append((nx, ny))
            
def solution(maps):
    answer = 0
    n = len(maps)
    m = len(maps[0])
    bfs(maps, 0, 0, n, m)
    if maps[n-1][m-1] == 1:
        return -1
    else:
        return maps[n-1][m-1]

0개의 댓글