#문제
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
#풀이 & 학습한 내용
이번 문제에서 dp배열을 int로 선언하면 "틀렸습니다"가 나온다. long long으로 dp배열을 선언하여 문제를 해결했다. 마지막에 나올 수 있는 수는 0또는 1이고 2차원 배열을 통해 N자리 이친수의 마지막 수가 0인 경우는 dp[N][0]에, 1인 경우는 dp[N][1]에 경우의 수를 저장했다. 그리고 마지막 수가 0인 경우는 바로 앞에 0,1 모두 올 수 있고, 마지막 수가 1인 경우는 바로 앞에 0만 올 수 있다는 점을 이용하여 반복문을 통해 dp배열을 채워나갔다. 이때 basis case로 dp[1][0] = 0과 dp[1][1]=1을 넣어주었다.
#소스코드
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include<iostream>
#include<algorithm>
using namespace std;
long long dp[91][2];
int main(void) {
dp[1][0] = 0;
dp[1][1] = 1;
for (int i = 2; i <= 90; i++) {
dp[i][0] = dp[i-1][1] + dp[i-1][0];
dp[i][1] = dp[i-1][0];
}
int N;
cin >> N;
cout << dp[N][0] + dp[N][1] << '\n';
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_2193.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
| [C++] 백준 14002번 : 가장 긴 증가하는 부분 수열 4 (G4) (0) | 2020.11.09 |
|---|---|
| [C++] 백준 11053번 : 가장 긴 증가하는 부분 수열 (S2) (0) | 2020.11.09 |
| [C++] 백준 10844번 : 쉬운 계단 수 (S1) (0) | 2020.11.07 |
| [C++] 백준 15990번 : 1, 2, 3 더하기 5 (S3) (0) | 2020.11.07 |
| [C++] 백준 11052번 : 카드 구매하기 (S1) & 16194번 : 카드 구매하기 2 (S1) (0) | 2020.11.06 |