class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
cost.append(0)
for i in range(len(cost)-1-2, -1, -1):
cost[i] += min(cost[i+1], cost[i+2])
return min(cost[0], cost[1])
https://youtu.be/ktmzAZWkEZ0?si=ovGzSVLU3LhGRQGh
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
# 꼭대기를 0으로 설정하기 위해 cost 리스트에 0을 추가합니다.
# 이렇게 하면 마지막 계단에서 꼭대기로 이동하는 추가 비용을 처리하지 않아도 됩니다.
# 예: 입력이 [10, 15, 20]이라면, cost는 [10, 15, 20, 0]이 됩니다.
cost.append(0)
# 뒤에서부터 앞으로 최소 비용을 계산하기 위한 루프
# len(cost) - 3부터 시작하는 이유:
# - len(cost) - 1: 꼭대기 (0) -> 이미 정의됨
# - len(cost) - 2: 마지막 계단 -> 이미 최소 비용 계산 가능
# - len(cost) - 3부터 계산해야 두 계단 뒤까지의 비용을 참조할 수 있음
for i in range(len(cost) - 3, -1, -1):
# 현재 계단에서 최소 비용 계산
# i 계단의 비용 + (i+1 또는 i+2 계단 중 더 적은 비용)
# 이 값은 i 계단에서 꼭대기까지 올라가는 최소 비용이 됩니다.
cost[i] += min(cost[i + 1], cost[i + 2])
# 첫 번째 계단(cost[0])과 두 번째 계단(cost[1]) 중 더 적은 비용 반환
# 왜냐하면 시작 위치는 첫 번째 계단 또는 두 번째 계단 중 하나로 자유롭게 선택할 수 있기 때문입니다.
return min(cost[0], cost[1])
# 전체 알고리즘의 핵심:
# - 뒤에서부터 앞으로 거슬러 올라가며, 각 계단에서 최적의 선택을 누적 계산
# - 모든 계단에서 꼭대기까지의 최소 비용을 구한 후, 시작점이 첫 번째 계단과 두 번째 계단일 때의 최소 비용 반환
3차: 2025.01.02(목) : 아직 한번에 안풀림
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
# 마지막 인덱스 가지전 1칸 또는 2칸 갈수 있음
# 그래서, 2칸 전인 지점부터..계산하면..
for i in range(len(cost)-1-2, -1, -1):
cost[i] += min(cost[i+1], cost[i+2])
# 계산 끝나면. 마지막 2개 중 최소값 return
return min(cost[0], cost[1])
'LeetCode > DP심화' 카테고리의 다른 글
322. Coin Change (0) | 2024.12.29 |
---|---|
139. Word Break ★ (0) | 2024.12.29 |
1137. N-th Tribonacci Number (1) | 2024.11.22 |
72. Edit Distance (0) | 2024.11.08 |
714. Best Time to Buy and Sell Stock with Transaction Fee (2) | 2024.11.08 |