https://school.programmers.co.kr/learn/courses/30/lessons/159993
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