๋ฌธ์ ๋งํฌ
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<int, int>, int>, vector<pair<pair<int, int>, int>>, greater<pair<pair<int, int>, 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 |
'๋ฐฑ์ค > 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 |