Haribo ML, AI, MATH, Algorithm

게임 맵 최단거리


기본적인 BFS 문제.

import numpy as np
def solution(maps):
    board = np.pad(maps, ((1,1),(1,1)), 'constant', constant_values=0).tolist() # 1칸씩 패딩
    n, m = len(board)-2, len(board[0])-2 # 원본 맵 크기
    d = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 이동 벡터
    que = [[1, 1, 1]] # h, w, cost 
    while que :
        h, w, cost = que.pop(0)
        if cost > n*m : continue # 목표지점까지 못가는 경우
        if (h, w) == (n, m) : return cost # 목표지점 도달 했을 경우
        for next_h, next_w in [[h+dh, w+dw] for dh, dw in d] :
            if board[next_h][next_w] != 0  : # 벽이 아닌 경우
                que.append([next_h, next_w, cost+1])
                board[next_h][next_w] = 0 # 이미 지나간 길은 벽으로 막음
    return -1


이전 포스트 사칙연산

다음 포스트 선입 선출 스케줄링

Comments

Content