문제 링크입니다: https://www.acmicpc.net/problem/2011
0은 어떠한 알파벳도 아니라는 것을 인지하는 것이 핵심이자 함정이였습니다.
그 외에는 숫자를 하나만 보고 A~I로 인지하는 경우의 수, 두개를 보고 J~Z로 인지하는 경우의 수를 합쳤습니다.
#include <iostream>
#include <string>
using namespace std;
const int MAX = 5000 + 1;
const int MOD = 1000000;
int len;
int arr[MAX];
int cache[MAX];
int password(void)
{
cache[0] = 1; //0
for (int i = 1; i <= len; i++)
{
//A~I로 인지하였을 경우
if (arr[i] >= 1 && arr[i] <= 9)
cache[i] = (cache[i - 1] + cache[i]) % MOD;
if (i == 1)
continue;
//J~Z로 인지하였을 경우
int temp = arr[i] + arr[i - 1] * 10;
if (10 <= temp && temp <= 26)
cache[i] = (cache[i - 2] + cache[i]) % MOD;
}
return cache[len];
}
int main(void)
{
string s;
cin >> s;
len = s.length();
if (len >= MAX)
exit(-1);
for (int i = 1; i <= len; i++)
arr[i] = s[i - 1] - '0';
if (len == 1 && s[0] == 0) //중요
cout << 0 << endl;
else
cout << password()<< endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2631번 줄세우기 (0) | 2018.03.10 |
---|---|
백준 10164 격자상의 경로 (0) | 2018.03.10 |
백준 9507 Generations of Tribbles (0) | 2018.03.09 |
백준 1904 01타일 (0) | 2018.03.09 |
백준 13460 째로탈출 2 (2) | 2018.03.08 |