https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
문제
이진수 중
- 1이 연속으로 들어오지 않고
- 1로 시작하는 수를
이천수라 한다. 예를들어 1001이나 1010은 이천수지만, 1101이나 10110은 이천수라 할 수 없다.
n자리수(1<=n<=90)의 이천수 개수를 구해라.
풀이방법
https://lionontheshore.tistory.com/33?category=929275
[BOJ/C++]10844 번 쉬운 계단 수
https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 계단 수는 '45656'과 같이 인접한 모든 자리 수가 1씩 차이나..
lionontheshore.tistory.com
와 비슷한 방식으로 풀었다. 다만 이 문제는 올 수 있는 수가 0,1 두 개로 더 간단하게 풀 수 있었다.
i번째에 0이 오는 경우는 i-1번째에서 0인 경우와 1인 경우 두 경우를 더해주었고,
i번째에 1이 오는 경우는 i-1번째에서 0인 경우만 가져왔다.
**내가 틀렸던 부분**
처음에 출력하는 정수를
int dp[n+1][2];
로 정의했다. 이 경우 n에 90을 넣었을 때 범위를 초과하므로
long dp[n+1][2];
로 정의해야 한다.
소스코드
#include<iostream>
using namespace std;
int main(void){
int n;cin>>n;
long dp[n+1][2];
dp[1][0]=1;dp[1][1]=1;
for(int i=2;i<=n;i++){
dp[i][0]=dp[i-1][0]+dp[i-1][1];
dp[i][1]=dp[i-1][0];
}
cout<<dp[n][1]<<endl;
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/C++]2156번 포도주 시식 (0) | 2020.07.29 |
---|---|
[BOJ/C++]9465번 스티커 (0) | 2020.07.29 |
[BOJ/C++]11057번 오르막 수 (0) | 2020.07.29 |
[BOJ/C++]10844 번 쉬운 계단 수 (0) | 2020.07.29 |
[BOJ/C++]9095번 1,2,3 더하기 (0) | 2020.07.29 |
댓글