문제
체감 난이도(1~5) : 2.0
풀이
N 번째 칸을 채우는 경우를 생각하면 두 가지 경우가 나올 수 있다.
m[n-1] 까지 구한 경우, 마지막 세로 직사각형 하나를 끼우는 경우,
m[n-2] 까지 구한 경우, 마지막 가로 직사각형 두 개를 끼우는 경우로 구분해서 푼다.
int func(int n){
if(m[n]>0)
return m[n];
if(n<3)
return m[n];
m[n] = (func(n-1) + func(n-2))%10007;
return m[n];
}
배운 점
- 모든 경우의 수를 하나씩 쓰다보면 패턴이 보이는 쉬운 경우
- 그러나 그건 요행에 가깝다고 생각함. 풀이처럼 m[N]에 들어가는 경우의 수를 몇 가지로 나누어서 생각하도록 연습하자!!
Comments