Victoree's Blog

2011_암호코드 본문

Algorithm/2019~2020

2011_암호코드

victoree 2021. 4. 22. 17:45
728x90

Concept & Idea

문제 상황을 좀 더 간결히 해서, int x에 값을 넣음으로 조건문이 되게 간단해 질 수 있었다.
자리가 1자리일 때의 경우와, 2자리가 가능할 때의 경우를 나눠서 생각했으면 빠르게 풀었을 것 같다.
또한 더할 때 dp[i-1]%1000000 라고 풀었었는데, 이렇게 풀면 안된다. 더하고 나서 따로 mod를 취해주어야 한다…😢

Code

#include <iostream>
#include <string>
using namespace std;
string n;
int dp[5001];
int main() {
    cin>>n;
    int s=n.size();
    dp[0]=1;
    n=" "+n;
    for(int i=1; i<=s; i++) {
        int x=n[i]-'0';
        if(x>=1 && x<=9) {
            dp[i]+=dp[i-1];
            dp[i]%=1000000;
        }
        if(i==1 || n[i-1]=='0')
            continue;
        x+=(n[i-1]-'0')*10;
        if(x>=10 && x<=26) {
            dp[i]+=dp[i-2];
            dp[i]%=1000000;
        }
    }
    cout<<dp[s]<<endl;
}

 

Fealing

처음 생각했던 것과 자꾸 다른 예시가 나오니 조건문을 너무 더럽게 붙여서 풀지 못했다.
생각을 간결히 하고, 아스키코드를 잘 이용해서 문제를 풀어보자
자꾸 전석희 교수님이 생각나는 문제다.. 이 문제는.. “-‘0’“때문인지…

728x90

'Algorithm > 2019~2020' 카테고리의 다른 글

12738_가장 긴 증가하는 부분 수열3  (0) 2021.04.22
1915_가장 큰 정사각형  (0) 2021.04.22
9461_파도반 수열  (0) 2021.04.22
2133_타일 채우기  (0) 2021.04.22
1699_제곱수의 합  (0) 2021.04.22
Comments