์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- GitHub
- ๊ฐ๋ฐ์์ค๋น #์ปดํจํฐ๊ณตํ๊ณผ
- ๋ฐฑ์ค
- ๋์ ํ ๋น๋ฒ
- html #css์ ๋ฌธ #visual studio
- C++
- HTML์ ๋ฌธ
- ๋ฏธ๊ตญ์ฌํ #๋ฏธ๊ตญ์ ๊ตญ์ฌํ
- 2579
- Today
- Total
๐๊ฐ๋ฐ๊ณผ ์ผ์ (โง∇โฆ)๏พ
[๋ฐฑ์ค c++] 16139 ์ธ๊ฐ-์ปดํจํฐ ์ํธ์์ฉ (์ค1) ๋ณธ๋ฌธ
๐ ๋ฌธ์
๋ด์ฉ์ ์ง๊ด์ ์ด๊ฒ ์ ๋ฆฌํ์๋ฉด,
๋ฌธ์์ด ๊ฐ ์ฃผ์ด์ง๊ณ , ํ ์คํธ ์ผ์ด์ค q ๋ฅผ ์ ๋ ฅ ๋ฐ์ผ๋ฉด
๋ฌธ์์ด S ๋ด l๋ฒ์งธ ~ r๋ฒ์งธ ๋ฌธ์ ๋ด์ ๋ฌธ์ a๊ฐ ๋ช ๊ฐ ์๋์ง ์ผ์ด์ค ๋ณ๋ก ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
์กฐ๊ฑด์ ๋ฌธ์์ด์ 20๋ง์ ์ดํ, ํ ์คํธ ์ผ์ด์ค ์๋ 20๋ง๊ฐ์ด๋ค.
์ด๊ฒ ๋ฌธ์ ๋ผ๊ณ ? ๋๋ฌด ์ฝ์์ ๊ทธ๋ฅ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ณ์ฐํ๋ฉด ๋์ง ์์๊น? ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์์ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๋ณด์. ํ ์คํธ์ผ์ด์ค๋ง๋ค ๋ฌธ์์ด์ ํ์ํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ฌ ๋นํจ์จ์ ์ด๋ค.
์ด ๋ฌธ์ ๋, ๊ฒฐ๋ก ์ ๋จผ์ ๋งํ์๋ฉด ๋์ ํฉ ๋ฌธ์ ์ด๋ค.
๋์ ํฉ์ ๋น๋์๋ ๊ตฌ๊ฐ ๋ณ ์ซ์์ ํฉ์ ๊ณ์ฐํ ๋ DP๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, n๋ถํฐ m๊น์ง ์์์ ์๋ ์ซ์๋ฅผ ๋ค ๋ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ๊ฒฝ์ฐ ์ด ์ ์ 0๋ฒ์งธ ์ซ์๋ถํฐ 5๋ฒ์งธ ์ซ์๋ฅผ ๋ํ๋ ์ ์ (?)์ด ์๋ค๋ฉด ์ดํ 0๋ฒ์งธ ์ซ์๋ถํฐ 9๋ฒ์งธ ์ซ์๋ฅผ ๋ํ ๋ 0~5๊น์ง์ ํฉ์ ๋ ๊ตฌํ ํ์๊ฐ ์์ด ์ด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํ ์ ์๋ค. ์ด๋ ์๋ฃ๊ตฌ์กฐ ํ๋๋ฅผ ์ ์ธํด ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ธ DP๋ฅผ ํ์ฉํ๋ค.
๋์ ํฉ์ DP๋ณด๋ค ๋ ์ฌ์ธ ์ ์๋ค!
๋จผ์ ์ด ๋ฌธ์ ์์ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์์ ๋, ๋ฌธ์์ด์ ํ ๋ฒ ์ํ์ ํ๋ ๊ฒ์ด๋ค.
์ด๋, 0๋ฒ์งธ ๋ฌธ์๋ฅผ ์ฒดํฌํ ๋ ๋ฌธ์์ ์ํ๋ฒณ ๋๋ก DP์ ์ ์ฅํ๋ค.
DP๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ธํ๋ฉฐ ํ์ 26, ์ด์ ๋ฌธ์์ด S ๊ธธ์ด ๋งํผ ์ ์ธํ์.
0๋ฒ์งธ ๋ฌธ์๊ฐ ์๋ฅผ ๋ค์ด 'c' ๋ผ๋ฉด DP์ 2๋ฒ์งธ ์ธ๋ฑ์ค ( 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ 'a' ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์) ์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ 1์ด๋ผ๊ณ ์ง์ ํ์.
์ด๋ ์ฆ, DP[2][0] = 1 ์ด ๋๋ค.
์ดํ 1๋ฒ์งธ ๋ฌธ์๊ฐ ๋ 'c'๋ผ๋ฉด DP์ 2๋ฒ์งธ ์ธ๋ฑ์ค์ 1๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ๋
DP[2][1] = DP[2][0] + 1
๋ฅผ ํ๋ค. ์?
์ด์ 0๋ฒ์งธ ๊น์ง์ ๋ฌธ์์ด์์ 'c'๊ฐ ๋ํ๋ ๊ฐฏ์์ธ DP[2][0] ์ 1๋ฒ์งธ ๋ฌธ์ 'c' ๊ฐ์์ธ 1์ ๋ํจ์ผ๋ก์จ
DP[2][1] ์ ๊ฐ์ ์๋ฏธ๋ 1๋ฒ์งธ ๋ฌธ์๊น์ง 'c'์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
์ด๋ ๊ฒ, ๋ฌธ์๋ฅผ ํ๋ฒ ์ํํ๊ฒ ๋จ์ผ๋ก์จ ์์ ์์๋ ๋ฌธ์์ ๊ฐ์๊น์ง ๊ณ์ฐ์ ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(N*M) -> O(N) ์ผ๋ก ๋ณํ๊ฒ ๋๋ ๊ฒ์ด๋ค (์ด๋ N์ ๋ฌธ์์ด S์ ๊ธธ์ด, M์ ํ ์คํธ์ผ์ด์ค ์๋ค.)
ํจ์จ์ฑ์ด ๊ทน๋๋ก ๋์์ง๋ค!
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ด ๋ฌธ์ ๋ ๊น๋ค๋ก์ธ ์ ์๋ ์ด์ ๋,
ํด๋น ๋ฌธ์ ๋ฅผ ๋์ ํฉ์ผ๋ก ํ ์ ์๋ค๋ ์๊ฐ์ ํ์ง ๋ชปํ๋ฉด ์๊ฐ์ด๊ณผ์ ๋ฏธ๊ถ์ ๋น ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค.
๐ป ์ ๋ต ์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string S; cin >> S;
vector<int> dp[26];
for (int i = 0; i < S.size(); ++i) {
for (int j = 0; j < 26; ++j) {
if (i == 0) {
int num = S[i] - 'a';
if (num == j) {
dp[j].push_back(1);
}
else {
dp[j].push_back(0);
}
}
else {
int num = S[i] - 'a';
if (num == j) {
dp[j].push_back(dp[j][i - 1] + 1);
}
else {
dp[j].push_back(dp[j][i - 1]);
}
}
}
}
int q, l, r;
char alpha;
cin >> q;
for (int i = 0; i < q; ++i) {
cin >> alpha >> l >> r;
int idx = alpha - 'a';
if (l == 0) {
cout << dp[idx][r] << "\n";
}
else {
cout << dp[idx][r] - dp[idx][l - 1] << "\n";
}
}
return 0;
}
'CS > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค c++] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (์ค4) (0) | 2023.02.24 |
---|---|
[๋ฐฑ์ค c++] 2798 ๋ธ๋์ญ 2ํธ (๋ธ2) (0) | 2023.02.24 |
[๋ฐฑ์ค c++] 14501 ํด์ฌ (์ค3) (0) | 2022.11.16 |
[๋ฐฑ์ค c++] 18406 ๋ญํค ์คํธ๋ ์ดํธ (๋ธ2) (0) | 2022.09.21 |
[๋ฐฑ์ค c++] 2798 ๋ธ๋์ญ (๋ธ2) (0) | 2022.03.09 |