문제
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
- (1칸, 1칸, 1칸, 1칸)
- (1칸, 2칸, 1칸)
- (1칸, 1칸, 2칸)
- (2칸, 1칸, 1칸)
- (2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.
풀이 과정
1칸 : 1가지
2칸 : 2가지
- 1 1
- 2
3칸 : 3가지
- 1 1 1
- 1 2
- 2 1
4칸 : 5가지
- 위의 예제
5칸 : 8가지
- 1 1 1 1 1
- 2 1 1 1
- 1 2 1 1
- 1 1 2 1
- 1 1 1 2
- 2 2 1
- 1 2 2
- 2 1 2
다음과 같이 피보나치 규칙에 따라 방법의 횟수가 증가한다.
코드
class Solution {
fun solution(n: Int): Long {
// 피보나치 수열//
if(n == 1) return 1
val dp = Array(n){0}
dp[0] = 1
dp[1] = 2
for(i in 2 until n){
dp[i] = (dp[i-1] + dp[i-2]) % 1234567
}
return dp[n-1].toLong()
}
}
'코딩 테스트 > Dynamic Programming' 카테고리의 다른 글
[프로그래머스] 피보나치 수(Lv 2) with Kotlin (0) | 2024.03.05 |
---|---|
[프로그래머스] 멀리 뛰기 with Kotlin (0) | 2023.11.07 |
[프로그래머스] 피보나치 수 with Kotlin (0) | 2023.11.06 |