[프로그래머스] 미로 탈출

·2023년 11월 26일
0

알고리즘

목록 보기
7/23

문제

[프로그래머스] 미로 탈출

접근 방법

  • 최단 거리 구하기, 경로 비용 모두 1 -> BFS 사용
  • 경유 노드(레버)가 있기 때문에 bfs 두번 쓴다.
    • bfs(시작노드, 레버) + bfs(레버, 문)

정답 코드

from collections import deque


def bfs(start, end, maps):
    queue = deque()
    queue.append((start[0], start[1], 0))
    
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    visited = [[0] * len(maps[0]) for i in range(len(maps))]
    visited[start[0]][start[1]] = 1
    
    
    while queue:
        x, y, cnt = queue.popleft()
        if end == [x,y]:
            return cnt
        
        for i in range(4):
            ax, ay = x+dx[i], y+dy[i]
            if 0 <= ax < len(maps) and 0<= ay < len(maps[0]) and maps[ax][ay] != 'X':
                if visited[ax][ay] == 0:
                    visited[ax][ay] = 1
                    queue.append([ax, ay, cnt+1])
    return 0
    

def solution(maps):
    answer = 0
    global s, l, e
    s = []
    l = []
    e = []

    
    for i in range(len(maps)):
        for j in range(len(maps[0])):
            if maps[i][j] == 'S':
                s = [i,j]
            elif maps[i][j] == 'L':
                l = [i,j]
            elif maps[i][j] == 'E':
                e = [i,j]
                
    st = bfs(s,l, maps)
    le = bfs(l,e, maps)
    
    if st != 0 and le != 0:
        answer = st + le
    else:
        answer = -1
        
    return answer

참고

DFS/BFS

0개의 댓글