관리 메뉴

Storage Gonie

(21) [C, C++, Java] 백준 No.2011 : 암호코드 본문

알고리즘/백준풀이6. 다이나믹프로그래밍

(21) [C, C++, Java] 백준 No.2011 : 암호코드

Storage Gonie 2019. 5. 17. 22:31
반응형

문제

풀이

자세한 풀이 : https://ldgeao99.tistory.com/entry/챕터3-22-DP-문제-풀이4-5-백준-No2011-암호코드

 

# C++

#include <iostream>

using namespace std;

int d[5001];

int main()
{
    string s;
    cin >> s;

    s = " " + s; // index를 1부터 사용하기 위함.

    int s_len = s.length() - 1;

    d[0] = 1;

    for (int i = 1; i <= s_len; i++){
        
        /*s[i] 한 자리 수 인 경우로 인식하여 개수 카운트*/
        int c = s[i] - '0';
        if (1 <= c && c <= 9){
            d[i] += d[i-1];
            d[i] %= 1000000;
        }

        /*s[i-1], s[i]두 자리 수 인 경우로 인식하여 개수 카운트*/
        if (i == 1)
            continue;

        if (s[i-1] == '0') // 두 자리 중 앞자리가 0이면 두자리수가 아니므로 카운트할 필요가 없음
            continue;
        
         c = stoi(s.substr(i-1, 2));
         if(10 <= c && c <= 26){
            d[i] += d[i-2];
            d[i] %= 1000000;
         }
    }

    cout << d[s_len] << "\n";
}

 

# C

#include <cstring>
#include <cstdio>
int d[5001];
int mod = 1000000;
char s[5002];
int main() {
    scanf("%s",s+1);
    int n = strlen(s+1);
    d[0] = 1;
    for (int i=1; i<=n; i++) {
        int x = s[i] - '0';
        if (1 <= x && x <= 9) {
            d[i] += d[i-1];
            d[i] %= 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-2];
            d[i] %= mod;
        }
    }
    printf("%d\n",d[n]);
    return 0;
}

 

# Java

import java.util.*;
import java.math.*;

public class Main {
    public static int mod = 1000000;
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine().trim();
        int n = s.length();
        s = " " + s;
        int[] d = new int[n+1];
        d[0] = 1;
        for (int i=1; i<=n; i++) {
            int x = s.charAt(i) - '0';
            if (1 <= x && x <= 9) {
                d[i] += d[i-1];
                d[i] %= mod;
            }
            if (i==1) {
                continue;
            }
            if (s.charAt(i-1) == '0') {
                continue;
            }
            x = (s.charAt(i-1)-'0')*10 + (s.charAt(i)-'0');
            if (10 <= x && x <= 26) {
                d[i] += d[i-2];
                d[i] %= mod;
            }
        }
        System.out.println(d[n]);
    }
}
반응형
Comments