-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path미로_탈출.py
75 lines (44 loc) · 1.54 KB
/
미로_탈출.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# https://school.programmers.co.kr/learn/courses/30/lessons/159993
"""
조건이 존재하는 전형적인 최단 거리 탐색 문제였다.
"""
from collections import deque
def solution(maps):
answer = 0
n = len(maps)
m = len(maps[0])
for i in range(n):
for j in range(m):
if maps[i][j] == 'L':
lever_x = i
lever_y = j
elif maps[i][j] == 'E':
exit_x = i
exit_y = j
elif maps[i][j] == 'S':
start_x = i
start_y = j
distance = bfs(start_x,start_y,n,m,maps)
if distance[lever_x][lever_y] == -1 or distance[exit_x][exit_y] == -1:
return -1
answer += distance[lever_x][lever_y]
distance = bfs(lever_x,lever_y,n,m,maps)
answer += distance[exit_x][exit_y]
return answer
def bfs(a,b,n,m,maps):
visited = [[-1]*m for _ in range(n)]
q = deque()
q.append((a,b))
visited[a][b] = 0
dx = [1,0,-1,0]
dy = [0,1,0,-1]
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<= nx < n and 0 <= ny < m:
if maps[nx][ny] != 'X' and visited[nx][ny] == -1:
q.append((nx,ny))
visited[nx][ny] = visited[x][y] + 1
return visited