개발자일걸요..?

1904번 01타일 본문

알고리즘코딩/Baekjoon Online Judge

1904번 01타일

Re_A 2021. 3. 3. 22:10
728x90
반응형

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

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net



<알고리즘>

 00과 1로 만들 수 잇는 조합 결과를 생각하기 보단 그 조합의 갯수를 생각해야함 

 1) N이 0개인경우, 1개인경우, 2개인 경우를 미리 계산해 배열에 넣어둠

 2) 그리고 N번째까지 배열의 값을 구하기

 3) 배열의 N번째 값 출력

 

 

 

버전 1. 재귀함수 사용 (시간초과)

#include <iostream>
#include <vector>
using namespace std;

long long inttile(int n) {
	if (n == 0) return 0;
	else if (n == 1) return 1;
	else if (n == 2) return 2;
	else {
		return tile(n - 1) + tile(n - 2);
	}
}
int main() {
	int N = 0;
	cin >> N;
	cout << tile(N)%15746 << "\n";
	return 0;
}

 

 

 

 

버전 2. 피보나치 수열 방식 차용(시간 : 20460KB  메모리 : 16ms)

N=0   0가지
N=1 1 1가지
N=2 00, 11 2가지
N=3 001, 100, 111 3가지
N=4 0000, 0011, 1100, 1111 4가지
N=5 00001, 10000, 11100, 11001, 10011,
00111, 11111
7가지
#include <iostream>
#include <vector>
using namespace std;

vector<long long int> dt = { 0,1,2 };
void tile(int n) {
	for (int i = 3; i <= n; i++) {
		dt.push_back((dt[i - 1] + dt[i - 2]) % 15746);
	}
}
int main() {
	int N = 0;
	cin >> N;
	tile(N);
	cout << dt[N]%15746 << "\n";
	return 0;
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

11279번 최대 힙  (0) 2021.03.05
9461번 파도반 수열  (0) 2021.03.04
9184번 신나는 함수 실행  (0) 2021.03.03
1629번 곱셈  (0) 2021.03.02
1780번 종이의 개수  (0) 2021.03.01
Comments