본문 바로가기

Data Engineering/Python

[코테] 프로그래머스 - 미로 탈출

from collections import deque

def solution(maps):
    def bfs(maps, start, target):
        n, m = len(maps), len(maps[0])
        visited = [[False]*m for _ in range(n)]

        sx, sy = -1, -1
        for i in range(n):
            for j in range(m):
                if maps[i][j] == start:
                    sx, sy = i, j
                    break
            if sx != -1:
                break
    
        q = deque()
        q.append((sx, sy, 0))
        while q:
            x, y, d = q.popleft()
            if maps[x][y] == target:
                return d

            for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
                nx, ny = x+dx, y+dy
                if 0 <= nx < n and 0 <= ny < m:
                    if maps[nx][ny] != 'X' and not visited[nx][ny]:
                        visited[nx][ny] = True
                        q.append((nx, ny, d+1))
        
        return -1
    

    maps = [list(x) for x in maps]

    distSL = bfs(maps, 'S', 'L')
    if distSL == -1:
        return -1
    distLE = bfs(maps, 'L', 'E')
    if distLE == -1:
        return -1
    
    return distSL + distLE


# https://school.programmers.co.kr/learn/courses/30/lessons/159993