문제 링크 : https://www.acmicpc.net/problem/1904

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다. 그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수

www.acmicpc.net

 알고리즘 

 

N=1 일 때 2진 수열의 개수 : 1

N=2 일 때 2진 수열의 개수 : 2

N=3 일 때 2진 수열의 개수 : 3

N=4 일 때 2진 수열의 개수 : 5

                 .

                 .

                 .

전형적인 피보나치 수열임을 알수있고 출력을 15745으로 나눈 나머지를 출력하여야되는데 

마지막 출력 직전에 15745로 나누면 안되고 계산하는과정에서 미리 나머지를 저장해야된다 안그러면 에러발생 .

 

주의사항 : 여기서 N이 95정도만 넘으면 int 범위를 초과하기 때문에 long long 으로 지정해둠

 

 코드 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
 
using namespace std;
 
typedef long long ll;
 
ll arr[1000001];
 
ll func(int n) {
    //종료부
    if (n == 1return 1;
    if (n == 2)return 2;
 
    //메모리 제이션
    if (arr[n]) return arr[n];
    arr[n] = (func(n - 1+ func(n - 2))%15746;
 
    return arr[n];
 
}
 
int main() {
 
    int N;
    cin >> N;
    cout << func(N);
}
 
cs

 

'c++ > 백준' 카테고리의 다른 글

백준 11727번: 2 x n 타일링 2  (0) 2020.03.25
백준 11726번: 2 x n 타일링  (0) 2020.03.25
백준 14500번 : 테트로미노  (0) 2020.03.25
백준 2841번 외계인의 기타연주  (0) 2019.11.21
백준 5397 키로거  (0) 2019.11.21
ariz1623