[프로그래머스] 미로 탈출(파이썬)

서봉성·2023년 7월 11일
0

코딩테스트

목록 보기
26/27

문제

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

풀이 방법

  • bfs를 이용하기 위해 deque를 선언하여 풀었음

코드

from collections import deque


def solution(maps):
    answer = -1
    
    dx=[1, -1, 0, 0]
    dy=[0, 0, 1, -1]
    dq=deque()
    visits=[[0]*len(maps[0]) for _ in range(len(maps))]
    
    for y in range(len(maps)):
        isTrue=False
        for x in range(len(maps[0])):
            if maps[y][x]=='S':
                dq.append([y, x, 0])
                isTrue=True
                break
        if isTrue:
            break
    
    while dq:
        y, x, cnt = dq.popleft()
        if visits[y][x]==1 or maps[y][x]=='X':
            continue
        
        visits[y][x]=1
        
        if maps[y][x]=='L':
            dq=deque()
            dq.append([y, x, cnt])
            break
        
        for i in range(4):
            ddy = y+dy[i]
            ddx = x+dx[i]
            if 0<=ddy and ddy<len(maps) and 0<=ddx and ddx<len(maps[0]):
                dq.append([ddy, ddx, cnt+1])
                
    if dq:
        visits=[[0]*len(maps[0]) for _ in range(len(maps))]
        while dq:
            y, x, cnt = dq.popleft()
            if visits[y][x]==1 or maps[y][x]=='X':
                continue
            
            visits[y][x]=1
            
            if maps[y][x]=='E':
                answer=cnt
                break
            
            for i in range(4):
                ddy = y+dy[i]
                ddx = x+dx[i]
                if 0<=ddy and ddy<len(maps) and 0<=ddx and ddx<len(maps[0]):
                    dq.append([ddy, ddx, cnt+1])
    
    return answer
profile
OverStudy

0개의 댓글