본문 바로가기
Algorithm/BOJ

[BOJ/C++]2193번 이천수

by DEV Lee 2020. 7. 29.

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

 

2193번: 이친수

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

www.acmicpc.net


문제

이진수 중

  1. 1이 연속으로 들어오지 않고
  2. 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

댓글