코딩테스트/Baekjoon

[백준 #2193] 이친수 (C++)

동띵 2021. 8. 28. 13:31

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

 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

 

이 문제는 다이나믹 프로그래밍을 사용해 풀었다.

 

n이 1일 경우 한자리 이친수의 개수 = 1 (1)

n이 2일 경우 두 자리 이친수의 개수 = 1 (10)

n이 3일 경우 세 자리 이친수의 개수 = 2 (100, 101)

n이 4일 경우 네 자리 이친수의 개수 = 3 (1000, 1001, 1010)

n이 5일 경우 다섯 자리 이친수의 개수 = 5 (10000, 10001, 10010, 10100, 10101)

 

이렇게 작은 부분부터 풀어나가면 피보나치 수열임을 알 수 있다.

따라서, dp[n] = dp[n-1]+dp[n-2]가 된다.

 

#include <iostream>
using namespace std;

long long dp[91] = { 0, 1, 1 };

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n;
	cin >> n;

	for (int i = 3; i <= n; i++) {
		dp[i] = dp[i - 1] + dp[i - 2];
	}

	cout << dp[n];
	return 0;
}

'코딩테스트 > Baekjoon' 카테고리의 다른 글

[백준 #1931] 회의실 배정 (C++)  (1) 2021.08.30
[백준 #9655] 돌 게임 (C++)  (0) 2021.08.29
[백준 #2217] 로프 (C++)  (0) 2021.08.27
[백준 #1037] 약수 (C++)  (0) 2021.08.26
[백준 #7662] 이중 우선순위 큐 (C++)  (0) 2021.08.25