멀리뛰기
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
|
|
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다.
멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요.
예를 들어 4가 입력된다면, 5를 return하면 됩니다.
제한 사항
- n은 1 이상, 2000 이하인 정수입니다.
입출력 예
n | result |
---|---|
4 | 5 |
3 | 3 |
입출력 예 설명
입출력 예 #1
위에서 설명한 내용과 같습니다.
입출력 예 #2
(2칸, 1칸)
(1칸, 2칸)
(1칸, 1칸, 1칸)
총 3가지 방법으로 멀리 뛸 수 있습니다.
# 문제 풀이
이 문제는
Dynamic Programming을 이용하는 문제이다. dp[n]
은 n
칸을 갈 수 있는 방법의 수이다. 그래서 dp[1]
부터 dp[n]
까지 경우의 수를 찾아 더해준다. 두 번째 for문에서는 1칸만으로 가는 경우의 수를 더해주고, 2칸도 사용해서 가는 경우의 수를 또 더해준다.
결과적으로, 갈 수 있는 칸이 [1,2]
칸이기 때문에 can-step
이 항상 can-1
또는 can-2
가 되어 피보나치와 같아지게 된다. 이 코드는 만약 [1,2]
칸이 아니라 더 여러 개의 칸을 갈 수 있는 문제였어도 그대로 적용할 수 있다.
피보나치로 푸는 코드는 다음과 같다.
|
|