알고리즘/BOJ

백준 2011 암호코드

꾸준함. 2018. 3. 9. 02:33

문제 링크입니다: 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