다이나믹 프로그래밍 문제다.
한 번에 1칸, 혹은 2칸 이동이 가능하다.
dp[i] 가 i번째에서 칸 이동까지 최대 개수의 방법을 나타낸다면
dp[i-1]에서 1칸 이동하는 경우와 dp[i-2]에서 2칸 이동하는 경우의 합과 같다.
따라서 점화식은 dp[i] = dp[i-1] + dp[i-2]로 나타낼 수 있다.
단, 이 문제에서 조심해야 할 점은 반복문을 다 마치고 1234567로 나누면 에러가 발생하므로 반복문 안에서 1234567로 나눠 정답을 맞추는 방식을 사용해야한다.
class Solution {
public long solution(int n) {
long answer = 0;
// 멀리 뛰기 연습
// 효진이는 한 번에 1칸, 또는 2칸 가능
// 칸이 총 4개 있을 때
// 1 1 1 1
// 1 2 1
// 1 1 2
// 2 1 1
// 2 2
// 5가지 방법 가능
int[] dp = new int[n+1];
dp[1] = 1;
// n이 1인 경우
if(n==1){
return 1;
}
dp[2] = 2;
// n이 2인 경우
if(n==2){
return 2;
}
else{
for(int i = 3 ;i<=n; i++){
dp[i] = (dp[i-1] + dp[i-2]) % 1234567;
}
answer = dp[n];
return answer;
}
}
}
간단한 다이나믹 프로그래밍 문제로 dp 문제 입문에 좋을 것 같다.