Lewis's Tech Keep

[백준] 암호코드 본문

Java/알고리즘

[백준] 암호코드

Lewis Seo 2021. 4. 5. 23:52

참고 : www.acmicpc.net/problem/2011

 

2011번: 암호코드

나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다.

www.acmicpc.net

 

- dp 문제

- dp[i] : dp[i] + dp[i-1] (1~9 사이일 경우)

- dp[i] : dp[i] + dp[i-1] + dp[i-2] (10~26사이일 경우) 두자리 수 고려

- 가장 깔끔하신 분 풀이 보고 찾아보았다. (github.com/hotehrud/acmicpc/blob/master/algorithm/dp/2011.java)

 

더보기
import java.util.*;

public class Solution {

    private static String n;
    private static int[] dp;
    private static int[] arr;
    private static int MOD = 1_000_000;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextLine();
        int len = n.length();

        dp = new int[len+1];
        arr = new int[len+1];
        for (int i = 1; i <= len; i++) {
            arr[i] = n.charAt(i-1) - '0';
        }

        dp[0] = 1;

        for (int i = 1; i <= len; i++) {

            if(arr[i] != 0) dp[i] = (dp[i] + dp[i-1]) % MOD;

            int overTen = arr[i] + arr[i-1] * 10;

            if(10 <= overTen && overTen <= 26) dp[i] = (dp[i] + dp[i-2]) % MOD;

        }
        
        System.out.println(dp[len] % MOD);
    }
}

'Java > 알고리즘' 카테고리의 다른 글

[백준] 내려가기  (0) 2021.04.07
[백준] 최단경로  (0) 2021.04.07
[백준] 1,2,3 더하기  (0) 2021.04.05
[백준] 동물원  (0) 2021.04.04
[백준] 상자넣기  (0) 2021.04.02
Comments