[프로그래머스 -1844] 게임 맵 최단거리

FeelingXD·2022년 12월 22일
0

문제풀이

목록 보기
4/34
post-thumbnail

❓ Problem

문제 설명
ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다.

게임 맵의 상태 maps가 매개변수로 주어질 때, 캐릭터가 상대 팀 진영에 도착하기 위해서 지나가야 하는 칸의 개수의 최솟값을 return 하도록 solution 함수를 완성해주세요. 단, 상대 팀 진영에 도착할 수 없을 때는 -1을 return 해주세요.

🤔 How

  • maps:list (n,m) 이 주어지며 최초좌표(1,1) 에서 => (n,m) 까지 최단경로를 구하고자 한다.
  • 모든 경우의 수가아닌 최솟값을 구하고자하기에 BFS로 구현하여 해결했다.

❗ Solve

from collections import deque

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


def solution(maps):
    return bfs(0, 0, maps)


def bfs(x, y, map: list):
    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 ny < 0 or nx >= len(map) or ny >= len(map[0]):
                continue

            if map[nx][ny] == 0:
                continue

            if map[nx][ny] == 1:
                map[nx][ny] = map[x][y]+1
                queue.append((nx, ny))
    return map[len(map)-1][len(map[0])-1] if map[len(map)-1][len(map[0])-1] != 1 else -1
  • dx , dy를 나누어서 문제를 해결했지만. 두가지의 경우를 상하 좌우 읽기 편한 코드로 리펙토링 하면 더 좋을거같다.
profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글