LeetCode발행일 2025. 2. 22.원본 https://blog.naver.com/jword_/223769557229 ↗

피보나치 수열의 응용 (Dynamic Programming)

피보나치 수열의 응용 (Dynamic Programming) — #LeetCode #피보나치수열 #코테피보나치수열 #DP #Dynamicprogramming #다이나믹프로그래밍 #동적계획...

#LeetCode#Naver Blog

#LeetCode #피보나치수열 #코테피보나치수열 #DP #Dynamicprogramming #다이나믹프로그래밍 #동적계획법 #개발자의도구들

​

​

  • only 파이썬
  • 목표 참고 : 여기

피보나치 수열의 응용

LeetCode(esay 70. Climbing Stairs) 53.3%

피보나치 수열은 현재와 그 이전의 값들이 당므 값을 결정하는 형태의 수열을 말한다.

​

가장 기본적인 것이 아래와 같은 형태

text 코드 예제
                                    1 2 (기본형)
1 2 3 5 8 13 21 34 ...

이런 류의 문제가 생각보다 많다. 이번 문제 역시 피보나치 수열 문제이다.

​

보통 문제 자체가 계단이라는 환경에서 표현되며, 한번에 오를 수 있는 계단 수가 주어진다. 조금만 생각해보면 피보나치 수열임을 알 수 있다.

​

DP로 끝장내기

DP는 현재까지의 최선을 기록해두고 다음 상태에서 의를 참조하는 식으로 이루어진다. 복잡하고 장황하게 설명하는 것보다 직관적인 설명이 실제 문제 풀이에는 도움이된다.

​

문제풀때는 다음을 기억하면된다.

text 코드 예제
                                    ✏️ DP가 필요한 환경인지 확인한다.
- 예를 들어 계단 오르기 처럼 한 방향으로 n칸씩 움직이는 문제와 같은 문제들이다.

✏️ map을 만든다.
각 점을 x좌표라고 생각하고 각 포인트마다 value를 가질 수 있도록 map을 구성한다.
{1: 1, 2: 2} 이런식이다.

✏️ 다음 결정은 map에서 참고한다.
다음 순서에 해당하는 값은 이전 value의 값들의 조합이다. map을 적극 활용하자.
python 코드 예제
                                    class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        stair = {1: 1, 2: 2}
        for i in range(3, n + 1):
            stair[i] = stair[i - 2] + stair[i - 1]

        return stair[n]
  • 매우 쉬우면서도 코딩테스트의 한 획을 관총하는 핵심문제이다.
  • 괜히 좋아요를 많이 받은 것이 아님

​