![](https://blog.kakaocdn.net/dn/cq5H1G/btsHoqYef6k/QBv6yKTwWvMkPpMDKxCsik/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/159993
![](https://blog.kakaocdn.net/dn/eimaGV/btsHp9VevN5/yeQGNNLo2hrkxoMgj1e3e0/img.png)
![](https://blog.kakaocdn.net/dn/l1rot/btsHqvDubD7/v3BsUrnTJi31szjkM8wkl1/img.png)
![](https://blog.kakaocdn.net/dn/PbJc3/btsHqnTcKXV/BEMAKG0r5Ju433HKcAarDK/img.png)
![](https://blog.kakaocdn.net/dn/vhPgt/btsHqq92jWB/fZkhUpEaDL4Gkm0J2kSMp1/img.png)
![](https://blog.kakaocdn.net/dn/ckMGgI/btsHpAyZt3P/OgWEbGj8VFDUkqkDG5kPO1/img.png)
코드
from collections import deque
def bfs(start, end, maps):
dy = [0, 1, -1, 0]
dx = [1, 0, 0, -1]
n = len(maps)
m = len(maps[0])
visited = [[False] * m for _ in range(n)]
q = deque()
for i in range(n):
for j in range(m):
if maps[i][j] == start:
q.append((i, j, 0))
visited[i][j] = True
while q:
y, x, cost = q.popleft()
if maps[y][x] == end:
return cost
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0<= ny <n and 0<= nx <m and maps[ny][nx] !='X':
if not visited[ny][nx]:
q.append((ny, nx, cost+1))
visited[ny][nx] = True
return -1
def solution(maps):
lever = bfs('S', 'L', maps)
exit = bfs('L', 'E', maps)
if lever != -1 and exit != -1:
return lever + exit
return -1
최소 시간 = 최소 거리를 구하는 문제이기 때문에 BFS를 사용하여 접근하였다.
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / 여행 경로 / python (0) | 2024.05.19 |
---|---|
Programmers / 2단계 / 줄 서는 방법 / python (0) | 2024.05.16 |
Programmers / 3단계 / 호텔 대실 / python (0) | 2024.05.13 |
Programmers / 2단계 / 시소 짝꿍 / python (0) | 2024.05.10 |
Programmers / 3단계 / 마법의 엘리베이터 / python (0) | 2024.05.09 |