상세 컨텐츠

본문 제목

다이나믹 프로그래밍(계단 오르기)

똑똑한 개발/Algorithm 과 Data Structure

by 성댕쓰 2021. 7. 5. 22:36

본문

문제: n개의 계단을 오르고자 한다. 한번에 1개, 2개씩의 계단을 오를수 있을때 총 몇가지 방벙으로 계단을 오를 수 있는가?

 

피보나치 수열 문제와 똑같다. 시작 지점만 다름.

다이나믹 프로그래밍(기초) (tistory.com)

 

다이나믹 프로그래밍(기초)

다이나믹 프로그래밍 적용 가능 조건 3가지 1. Problem이 Sub problem으로 나눠진다. 2. Sub problem으로 더 큰 규모의 sub problem 의 solution을 구할 수 있다. 3. Sub problem이 겹친다. -- memoization 이용..

dockdocklife.tistory.com

def climbStairs(n : int) -> int:
    dp_array = [0, 1, 2]
    for i in range(3, n+1):
        ith_way = climbStairs(i-1) + climbStairs(i-2)
        dp_array.append(ith_way)
    return dp_array[n]

 

문제: i번째 계단을 오르는 비용이 cost[i]로 주어졌다. 계단을 한번에 한칸 혹은 두칸씩만 오를수 있을때, 전체 계단을 오르는 최소 비용은 얼마인가.

from typing import List

def minCostStairs(cost:List[int]) -> int:
    dp_array = [0, 0]
    for idx in range(2, len(cost) + 1):
        minCost = min(dp_array[idx - 1] + cost[idx - 1], dp_array[idx - 2] + cost[idx - 2])
        dp_array.append(minCost)
        
    return dp_array[len(cost)]

stair_cost = [1,2,4,6,2,4,6,1]
print(minCostStairs(cost=stair_cost))

 

출처 : (5) 코딩테스트, 초급, 계단오르기 - YouTube

'똑똑한 개발 > Algorithm 과 Data Structure' 카테고리의 다른 글

다이나믹 프로그래밍(knapsack problem)  (0) 2021.07.06
다이나믹 프로그래밍(동전 바꾸기)  (0) 2021.07.06
다이나믹 프로그래밍(기초)  (0) 2021.07.05
Heap Sort  (0) 2021.05.29
Merge Sort  (0) 2021.05.29

관련글 더보기

댓글 영역