Algorithm, boj, 합분해(2225)

boj2225

풀이 & 틀린이유

  • 예제를 그리면서 규칙성을 찾기 어려울때는 n번째일때의 큰 그림을 생각해보자..!!
  • dp[n][0] (n번째 칸에 사자가 없을때)
    • dp[n-1][0] + dp[n-1][1] + dp[n-1][2];
  • dp[n][1] (n번째 칸의 왼쪽에 사자가 있을때) => 그 이전 칸에는 사자가 없거나 오른쪽에만 사자가 있어야 하므로
    • dp[n-1][0] + dp[n-1][2]
  • dp[n][2] = dp[n-1][0] + dp[n-1][1]

소스

package org.baekjoon;

import java.util.Scanner;

public class test1309_dp_zoo {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[][] dp = new int[N+1][3];

		for (int i = 1; i < N+1; i++) {
			if (i==1) {
				dp[i][0] = 1;dp[i][1] = 1;dp[i][2] = 1;
			}
			else
			{
				dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % 9901;
				dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % 9901;
				dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % 9901;
			}
		}


		int result = 0;
		for (int i=0; i<3; i++)
			result += dp[N][i];
		System.out.println(result % 9901);
	}

}

Reference