https://www.acmicpc.net/problem/11726



n이 1일 때는 1개, 2일 때는 2개, 3일 때는 3개...

위와 같은 형태로 n이 늘어날 때 규칙을 찾을 수 있다.

바로 n일 때 n-2에서 가로의 길이가 2인 사각형을 더하는 경우와 n-1에서 가로의 길이가 1, 세로가 2인 경우를 더해주는 것이다. 
n-1과 n-2에 붙여주는 사각형은 가로의 길이가 다르기 때문에 중복은 없다.

그리고 문제의 조건에서 결과값에 10007을 나눈 값을 구하는 경우이기 때문에 숫자가 커지더라도 
int의 범위를 넘지 않기 때문에 변수의 타입은 int로 해주었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main(){
    int n;
    cin>>n;
    
    int dp[1001]={0};
    dp[1]=1, dp[2]=2;
    
    for(int i=3;i<=n;i++){
        dp[i]=(dp[i-1]+dp[i-2]);
        dp[i]%=10007;
    }
    
    cout<<dp[n]<<endl;
}
cs




'알고리즘(BOJ) > DP' 카테고리의 다른 글

백준 1912번 - 연속합  (0) 2018.01.25
백준 2156번 - 포도주 시식  (0) 2018.01.25
백준 2193번 - 이친수  (0) 2018.01.25
백준 9095번 - 1,2,3 더하기  (0) 2018.01.25
백준 1149번 - RGB거리  (0) 2018.01.25

+ Recent posts