알고리즘 풀이/프로그래머스

[Level 3] 등굣길

mhko411 2021. 4. 15. 11:52
728x90

programmers.co.kr/learn/courses/30/lessons/42898

 

코딩테스트 연습 - 등굣길

계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m =

programmers.co.kr


접근

최소로 가기위해서는 웅덩이를 피해 오른쪽 또는 아래로만 이동해야한다.

따라서 각 지점으로 올 수 있는 경우의 수를 메모를 해둔다. 즉, 왼쪽과 위의 경로에 대한 경우의 수를 더해주도록 한다.

 

구현

시작점부터 도착지점까지 경로에 대한 경우의 수를 구한다.

만약 현재 위치가 puddles에 포함되어있다면 continue하고,

그렇지 않다면 현재 경우의 수를 왼쪽 길과 위에서 오는 길을 더해서 메모를 해둔다.

이렇게 되면 도착지점에 최소 경로의 수가 저장된다.

for i in range(1, n+1):
        for j in range(1, m+1):
            if i == 1 and j == 1:
                continue
            if [j, i] in puddles:
                continue
            else:
                visited[i][j] = visited[i-1][j] + visited[i][j-1]

전체 코드

def solution(m, n, puddles):
    answer = 0
    visited = [[0 for _ in range(m+1)] for _ in range(n+1)]
    visited[1][1] = 1
    
    for i in range(1, n+1):
        for j in range(1, m+1):
            if i == 1 and j == 1:
                continue
            if [j, i] in puddles:
                continue
            else:
                visited[i][j] = visited[i-1][j] + visited[i][j-1]
    answer = visited[n][m]
    return answer%1000000007

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 2] 게임 맵 최단거리  (0) 2021.06.07
[Level 3] 섬 연결하기  (0) 2021.05.12
[Level 3] 야근 지수  (0) 2021.04.15
[Level 3] 순위  (0) 2021.03.31
[Level 2] 위장  (0) 2021.03.30