Python/파이썬 자료구조 알고리듬

(파이썬) 등굣길 - 동적계획법

컴닥 2019. 9. 24. 22:40
반응형

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

 

코딩테스트 연습 - 등굣길

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

programmers.co.kr

def solution(m, n, puddles):
    arr = [[0 for _ in range(m)] for _ in range(n)]  # 경로를 담을 배열을 만듭니다. 
    arr[0][0] = 1  # 집의 위치에는 1이 들어가야 합니다. 
    for x, y in puddles:  # 웅덩이를 반영합니다.
        arr[y - 1][x - 1] = None
    for y in range(n):
        for x in range(m):
            if arr[y][x] is not None:  # 좌표 상 위의 경우의 수와 좌의 경우의 수의 합이 됩니다.
                arr[y][x] += 0 if arr[y - 1][x] is None else arr[y - 1][x]
                arr[y][x] += 0 if arr[y][x - 1] is None else arr[y][x - 1]
    return arr[-1][-1] % 1000000007
정확성  테스트
테스트 1 〉	통과 (0.01ms, 9.52MB)
테스트 2 〉	통과 (0.03ms, 9.59MB)
테스트 3 〉	통과 (0.04ms, 9.57MB)
테스트 4 〉	통과 (0.06ms, 9.51MB)
테스트 5 〉	통과 (0.13ms, 9.6MB)
테스트 6 〉	통과 (0.09ms, 9.45MB)
테스트 7 〉	통과 (0.09ms, 9.37MB)
테스트 8 〉	통과 (0.20ms, 9.62MB)
테스트 9 〉	통과 (0.10ms, 9.51MB)
테스트 10 〉	통과 (0.04ms, 9.62MB)
효율성  테스트
테스트 1 〉	통과 (5.59ms, 9.75MB)
테스트 2 〉	통과 (2.04ms, 9.55MB)
테스트 3 〉	통과 (2.44ms, 9.73MB)
테스트 4 〉	통과 (3.32ms, 9.75MB)
테스트 5 〉	통과 (2.86ms, 9.62MB)
테스트 6 〉	통과 (4.43ms, 9.76MB)
테스트 7 〉	통과 (2.42ms, 9.62MB)
테스트 8 〉	통과 (3.47ms, 9.84MB)
테스트 9 〉	통과 (3.59ms, 9.81MB)
테스트 10 〉	통과 (3.52ms, 9.59MB)

전형적인 동적계획법 문제입니다. 
경로를 담는 배열을 만들고, 배열에 경우의 수를 넣고, 합하면 됩니다. 

반응형