boj.kr/2011
수가 아무것도 없을 때는 그 자체도 한가지 경우라고 볼 수 있으므로
=> d[0] = 1;
수가 1개 있을 때의 경우의 수는 1가지
d[1] = 1;
수가 2개 있을 때의 경우의 수는
각자 하나씩의 알파벳을 나타내는 경우의 한가지와
만약 두 숫자를 합쳐서 나타낼 수 있는 26 이하의 숫자라면 한가지가 더 추가되어
한가지 또는 두가지가 된다.
#include <iostream>
#include <string>
#define mod 1000000
using namespace std;
long long d[5001];
int main() {
string s;
cin >> s;
int len = s.size();
s = " " + s;
d[0] = 1;
for (int i = 1; i <= len; ++i) {
int x = s[i] - '0';
if (1 <= x && x <= 9) {
d[i] = (d[i] + d[i - 1]) % mod;
}
if (i == 1) continue;
if (s[i - 1] == '0') continue;
x = (s[i - 1] - '0') * 10 + (s[i] - '0');
if (10 <= x && x <= 26) {
d[i] = (d[i] + d[i - 2]) % mod;
}
}
cout << d[len];
return 0;
}
'알고리즘' 카테고리의 다른 글
[DP] 백준 9084 동전 (0) | 2018.04.02 |
---|---|
[DP] 백준 동전 2 2294 (0) | 2018.04.02 |
[그래프] 백준 1987 알파벳 (0) | 2017.12.14 |
[그래프] 백준 5567 결혼식 (0) | 2017.12.13 |
[EAZY] 백준 1065번 한수 (0) | 2017.08.17 |