문제 링크 : 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 == 1) return 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 |