๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 2011 : ์•”ํ˜ธ์ฝ”๋“œ

by Jaeguk 2022. 3. 3.
๋ฌธ์ œ ๋งํฌ

2011๋ฒˆ: ์•”ํ˜ธ์ฝ”๋“œ (acmicpc.net)

 

2011๋ฒˆ: ์•”ํ˜ธ์ฝ”๋“œ

๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•ด์„์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. ์ •๋‹ต์ด ๋งค์šฐ ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 1000000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์•”ํ˜ธ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์•”ํ˜ธ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

์•”ํ˜ธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ํ•ด์„์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด

์•ŒํŒŒ๋ฒณ A~Z๋ฅผ 1~26์œผ๋กœ ์•”ํ˜ธํ™” ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด 1 1 ๊ณผ 11์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์•”ํ˜ธ์— ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•”ํ˜ธ๊ฐ€ 11์ด๋ผ๊ณ  ํ•˜๋ฉด "AA"์™€ "K"๋กœ 2๊ฐ€์ง€๋กœ ํ•ด์„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ 0์€ ์•„๋ฌด๋Ÿฐ ์•”ํ˜ธ๋„ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 10์ด ๋“ค์–ด์˜ค๋ฉด 1 0 ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ๋Š” ํ•ด์„ํ•  ์ˆ˜ ์—†๊ณ  10์œผ๋กœ ํ•ด์„ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์œผ๋กœ 0 ํ•˜๋‚˜๋งŒ ์ฃผ์–ด์ง„๋‹ค๋ฉด ํ•ด์„์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์ด๋ฏ€๋กœ 0 ์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋ฉด ๋œ๋‹ค.

์•„๋ฌด๋ž˜๋„ ๊ฐ ์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— int ํ˜•๋ณด๋‹ค๋Š” string ํ˜•์œผ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.

๋‚˜๋Š” DP๋ฐฐ์—ด์„ DP[์‹œ์ž‘์ ][๋์ ] ์œผ๋กœ ์„ค์ •ํ•ด์„œ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋์  ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์•”ํ˜ธ๊ฐ€ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค.

25114

์˜ˆ์ œ1์„ ์˜ˆ์‹œ๋กœ ๋“ค์ž๋ฉด 0~1 ์ธ๋ฑ์Šค๋ฅผ ๋ณด๋ฉด "25"์ด๋‹ค ์ด๋Š” 2, 5๋กœ๋„ ํ•ด์„๋  ์ˆ˜ ์žˆ๊ณ  25๋กœ๋„ ํ•ด์„๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

DP[0][1]์—๋Š” 2์˜ ๊ฐ’์„ ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค. ์‚ฌ์‹ค ์ถœ๋ฐœ์ ์€ ํ•ญ์ƒ 0์ด๊ธฐ ๋•Œ๋ฌธ์— DP๋ฅผ ๊ตณ์ด 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋์ง€๋งŒ ์ค‘๊ฐ„์— ์•„์ด๋””์–ด๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๊ณ ์น˜์ง€ ์•Š์œผ๋ ค ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ ๋๋‹ค.

DP[๋ฌธ์ž์—ด์˜ ๊ธธ์ด] ๋กœ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๋ฉด์—์„œ๋Š” ๋” ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์ฝ”๋“œ์ด๋‹ค.

0~2๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ฆ‰ "251"์„ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋ณด์ž.

2 5 1, 25 1, 2 51 ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์น ํ•œ 2 5์™€ 25๋Š” 0~1๊นŒ์ง€ ๋ดค์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

์ดˆ๋ก์ƒ‰์œผ๋กœ ์น ํ•œ 2๋Š” 0~0 ๊นŒ์ง€ ๋ดค์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

DP[0][2] ๋Š” DP[0][1] * DP[2][2] + DP[0][0] * DP[1][2] ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ DP[1][2] ๋Š” DP[1][2] ์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ ์˜ค๋ฉด ์•ˆ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด?

์ž„์˜์˜ ์ขŒํ‘œ i ์— ๋Œ€ํ•ด DP[0][i] = DP[0][i-1] * DP[i][i] + DP[0][i-2] * (i-1 ~ i ๋‘ ์ž๋ฆฌ๊ฐ€ ์ž์ฒด๋งŒ์œผ๋กœ ์•”ํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”์ง€?) ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ด์•ผํ•  ์ ์€ ๋’ค์˜ ์‹์ธ DP[0][i-2] * (i-1 ~ i ๋‘ ์ž๋ฆฌ๊ฐ€ ์ž์ฒด๋งŒ์œผ๋กœ ์•”ํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”์ง€?) ์ด ๋ถ€๋ถ„์ด๋‹ค.

2 51 ์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•ด์„œ ๋ณด๋Š” ๊ฒฝ์šฐ์—๋Š” ๋’ค์— 51์„ 5 1๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  51 ๊ทธ ์ž์ฒด๋กœ ์•”ํ˜ธ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š”์ง€๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋œ๋‹ค. ๋ฌด์Šจ ๋ง์ด๋ƒ ํ•˜๋ฉด 2 51 ์—์„œ๋Š” 2 5 1 ๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ๋Š” 2 5 1 ์—์„œ ์ด๋ฏธ ๊ณ ๋ ค๋๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด 51์€ 51 > 26 ์ด๊ธฐ ๋•Œ๋ฌธ์— 51 ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ์•”ํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์˜ ์‹์€ 0์ด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ DP[0][2] = DP[0][1] * DP[2][2] = 2 * 1 = 2

DP[0][3]("2511") = DP[0][2] * DP[3][3] + DP[0][1] * (2 ~ 3 ๊นŒ์ง€๊ฐ€ ์ž์ฒด๋งŒ์œผ๋กœ ์•”ํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”์ง€?)์ธ๋ฐ

DP[0][2] = ์•ž์—์„œ ๊ตฌํ•œ๋Œ€๋กœ  2์ด๊ณ  DP[3][3] = 1์ด๋‹ค.

DP[0][1] = 2 ์ด๊ณ  ๋’ค์˜ ๋‘์ž๋ฆฌ์ธ "11" ์€ <= 26 ์ด๊ธฐ๋•Œ๋ฌธ์— ์ž์ฒด๋งŒ์œผ๋กœ ์•”ํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ DP[0][3] = 2 * 1 + 2  = 4 ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ DP[i][i] ๋ผ๊ณ  ํ•ด์„œ ๋‹ค ๊ฐ’์ด 1์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. i ๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊ฐ’์ด '0' ์ด๋ผ๋ฉด DP[i][i] = 0 ์ด๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ DP[0][N-1] ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ์ •๋‹ต.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef priority_queue<pair<pair<intint>int>vector<pair<pair<intint>int>>, greater<pair<pair<intint>int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 5000 + 5;
int N;
int DP[MAX_N][MAX_N];
 
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string S;
    cin >> S;
    if (S.size() == 1 && S[0== '0') {
        cout << "0\n";
        return 0;
    }
    for (int i = 0; i < S.size(); i++) {
        if (S[i] == '0') {
            continue;
        }
        DP[i][i] = 1;
    }
    for (int i = 0; i < S.size() - 1; i++) {
        string temp = S.substr(i,2);
        if (S[i] == '0') {
            DP[i][i + 1= 0;
            continue;
        }
        else if (S[i + 1== '0') {
            if (stoi(temp) <= 26) {
                DP[i][i + 1= 1;
            }
            continue;
        }
        if(stoi(temp) <= 26)
            DP[i][i + 1= 2;
        else DP[i][i + 1= 1;
    }
    for (int i = 2; i < S.size(); i++) {
        DP[0][i] = DP[0][i - 1* DP[i][i];
        if (DP[i - 1][i] == 1 && stoi(S.substr(i-1,2))<= 26) {
            DP[0][i] += DP[0][i - 2];
        }
        else if(DP[i-1][i] == 2)DP[0][i] += DP[0][i - 2* (DP[i-1][i] - 1);
        DP[0][i] %= 1000000;
    }
    cout << DP[0][S.size() - 1]<< "\n";
    return 0;
}
cs

728x90

'๋ฐฑ์ค€ > Gold' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] 10775 : ๊ณตํ•ญ  (0) 2022.03.16
[BOJ] 16236 : ์•„๊ธฐ ์ƒ์–ด  (0) 2022.03.05
[BOJ] 2225 : ํ•ฉ๋ถ„ํ•ด  (0) 2022.03.02
[BOJ] 1937 : ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค  (0) 2022.03.01
[BOJ] 2133 : ํƒ€์ผ ์ฑ„์šฐ๊ธฐ  (0) 2022.03.01