브론즈 풀 땐 몰랐지 이런 절망감 ,,, dp는 왜 풀 때마다 새로울까? 계속 계속 계~~속 푸는게 답이다! 어렵다고 피하지 말고 풀자 꾸준히 푸는게 답이다 !!!
package baekjoon;
import java.util.Scanner;
public class Main_11727 {
static int[] dp;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
dp = new int[N+1];
// 초기값 세팅
dp[1] = 1;
if(N>1) {
dp[2] = 3;
}
for (int i = 3; i <= N; i++) {
dp[i] = (dp[i-1] + (2*dp[i-2]))%10007;
}
System.out.println(dp[N]);
}
}
허무하리만치 짧고 간결한 코드 ..
점화식을 구하기 위한 그림
n값이 증가함에 따라 1x2, 2x1, 2x2로 채울수 있도록 직사각형을 나누면 dp[n-1] + 2*dp[n-2] 라는 점화식이 도출된다.
점화식은 직전값과 연관될 수 있도록 생각하면 좀 더 쉽게 접근할 수 있을 것 같다.
한번 틀린 이유는 1이 들어왔을 때
// 초기값 세팅
dp[1] = 1;
if(N>1) {
dp[2] = 3;
}
if 조건처리를 안해줘서 ^^;