본문 바로가기

알고리즘/프로그래머스

2 x n 타일링

반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <vector>
 
using namespace std;
 
int solution(int n) {
    int i, tale[60000];
    tale[0= 0;
    tale[1= 1;
    tale[2= 2;
    
    for(i = 3; i <= n; i++) {
        tale[i] = (tale[i - 1+ tale[i - 2]) % 1000000007;
    }
    return tale[n];
}
cs

다 풀어놓고도 왜 틀렸는지 몰랐던 문제. 각각의 배열에 더해줄때 1000000007로 나눈 나머지를 저장했어야했다.

이 문제는 거꾸로 생각해보면 피보나치 수열과 같은 문제임을 알 수 있다.
예를 들어, n 길이의 타일이 주어졌다고 할 때 그중 1개의 타일을 뒤에서 뺴면 (n-1)개로 이뤄진 타일이다. 그리고 뒤에서 2개를 뺴면 (n-2)개로 이뤄진 타일이다. 3개를 빼나 1개를 빼고 2개를 뺀 것의 케이스를 더해주나 같으므로 n 길이의 타일은 (n-1) + (n-2)의 타일들의 경우의 수를 합한 것으로 이뤄져 있음을 알 수 있다.

그래서 배열 하나를 선언해주고 피보나치 수열을 계산할 때 처럼 반복문을 반복해주면 된다. 

더해줄 때 꼭!! 나눠서 할당을 해줘야함을 잊지 말자.


'알고리즘 > 프로그래머스' 카테고리의 다른 글

카펫  (0) 2018.10.28
전화번호 목록  (0) 2018.10.27
프린터  (0) 2018.10.24
H-Index  (0) 2018.10.24
쇠막대기  (0) 2018.10.22