https://school.programmers.co.kr/learn/courses/30/lessons/159993
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import deque
def solution(maps):
answer = 0
N, M = len(maps), len(maps[0])
matrix = [[0]*M for _ in range(N)]
start_x, start_y = 0, 0
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
for i in range(N):
for j in range(M):
if maps[i][j] == 'S':
start_x, start_y = i, j
elif maps[i][j] == 'X':
matrix[i][j] = -1
q = deque([(start_x, start_y)])
while q:
x, y = q.popleft()
if maps[x][y] == 'L':
answer = matrix[x][y]
start_x, start_y = x, y
break
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
if not(0 <= nx < N and 0 <= ny < M):
continue
if matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
q.append((nx, ny))
else:
return -1
matrix = [[0] * M for _ in range(N)]
for i in range(N):
for j in range(M):
if maps[i][j] == 'X':
matrix[i][j] = -1
q = deque([(start_x, start_y)])
while q:
x, y = q.popleft()
if maps[x][y] == 'E':
answer += matrix[x][y]
break
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
if not(0 <= nx < N and 0 <= ny < M):
continue
if matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
q.append((nx, ny))
else:
return -1
return answer
[프로그래머스] 154540. 무인도 여행| BFS | 파이썬, 소스코드, 정답 (1) | 2023.05.10 |
---|---|
[프로그래머스] 155651. 호텔 대실 | 정렬, 우선순위큐 | 파이썬, 소스코드, 정답 (1) | 2023.05.09 |
[프로그래머스] 160585. 혼자서 하는 틱택토 | 구현 | 파이썬, 소스코드, 정답 (0) | 2023.05.07 |
[프로그래머스] 169198. 당구연습 | 수학 | 파이썬, 소스코드, 정답 (0) | 2023.05.06 |
[프로그래머스] 169199. 리코쳇 로봇| BFS | 파이썬, 소스코드, 정답 (1) | 2023.05.05 |