[Python | 파이썬] 등굣길 (프로그래머스 DYNAMIC PROGRAMMING)
이 문제는 dynamic programming을 이용해서 풀 수도 있지만 BFS를 이용해서 풀 수도 있다.
움직이는 방향은 최단거리를 유지해야하므로 오른쪽으로 가거나 아래로 가야한다. 최단경로의 갯수를 리턴해야하므로 처음에 maps[0][0]에서의 경로의 갯수는 1으로 시작한다. 그리고 queue에 현재 좌표를 삽입하고, queue에 원소가 남아있을 때까지 반복문에서 매번 pop해주며 현재 좌표에서 오른쪽이나 아래쪽으로 이동가능하다면 queue에 그 좌표를 삽입한다. 또한 mapx[nx][ny] += maps[x][y]로 경로를 추가해준다.
더보기
dx = [0, 1]
dy = [1, 0]
from collections import deque
def solution(m, n, puddles):
answer = 0
maps = [[0] * m for _ in range(n)]
maps[0][0] = 1
q = deque([])
q.append((0, 0))
while q:
x, y = q.popleft()
for r in range(2):
nx, ny = x + dx[r], y + dy[r]
if 0 <= nx < n and 0 <= ny < m:
if [ny+1, nx+1] in puddles:
continue
maps[nx][ny] += maps[x][y]
if (nx, ny) not in q:
q.append((nx, ny))
answer = maps[n-1][m-1] % 1000000007
return answer
https://programmers.co.kr/learn/courses/30/lessons/42898
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Problem Solving > Programmers - Python' 카테고리의 다른 글
[Python | 파이썬] 도둑질 (프로그래머스 DYNAMIC PROGRAMMING) (0) | 2021.05.31 |
---|---|
[Python | 파이썬] 정수 삼각형 (프로그래머스 DYNAMIC PROGRAMMING) (0) | 2021.05.31 |
[Python | 파이썬] N으로 표현 (프로그래머스 DYNAMIC PROGRAMMING) (0) | 2021.05.31 |
[Python | 파이썬] H-Index (프로그래머스 정렬) (0) | 2021.05.31 |
[Python | 파이썬] 가장 큰 수 (프로그래머스 정렬) (0) | 2021.05.31 |