๐ค๋ฌธ์ ์ดํด
๋ฌธ์์ด S์ ๋์จ ๋ฌธ์๋ฅผ ์ค๋ณต์์ด ์์๋๋ก ์ฌ์ฉํด์ ๋ฌธ์์ด T๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ฅํ์ด๐ฅ
์ถ๋ ฅ๊ฐ์ ์ ์ฅํ ans์ ์ํ๋ฒณ๋ณ๋ก queue ์๋ฃ๊ตฌ์กฐ q๋ฅผ ์ ์ญ๋ณ์๋ก ์ ์ธํ๋ค.
์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด S์ ๊ฐ ๋ฌธ์์ ํด๋นํ๋ q์ ๋ฌธ์์ ์์น๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
S์ ๋ฌธ์ ์์๋๋ก T๋ฅผ ๋ง๋ค์ด์ผํ๊ธฐ ๋๋ฌธ์ ์ผ๋จ S์์ T๋ฅผ ๋ง๋ค ๋ฌธ์๊ฐ ์์ด์ ๋ฝ๊ณ ๋๋ฉด S์์ ๊ทธ ๋ฌธ์๋ณด๋ค ๋ค์ ์ค๋ ๋ฌธ์ ์ค์์ T์ ๊ทธ ๋ค์ ๋ฌธ์๋ฅผ ๋ฝ์์ผ ํ๋ฏ๋ก prev๋ณด๋ค ๋ ํฐ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ง๋ ๋ฌธ์๋ฅผ ์ฐพ์ ๋๊น์ง q๋ฅผ popํด์ค๋ค.
๋ง์ฝ q๊ฐ ๋น์ด์์ผ๋ฉด ๋ฌธ์์ด T๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก T๋ฅผ ์ฐพ๋ ์ฐ์ฐ์ ์ค๋จํ๋ค. cnt๊ฐ์ ์ด์ฉํด T์ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ฐพ์ ๋๋ง๋ค ++ํด์ฃผ๊ณ T์ size์ ๋์ผํด์ง๋ฉด ์ถ๋ ฅ๊ฐ ans๋ฅผ ++ํด์ค๋ค.
โํธ๋ฌ๋ธ ์ํ
์์๋๋ก๋ผ๊ธธ๋ T๋ฅผ ์์ฑ์ํฌ ๋๊น์ง ๊ณ์ S๋ฅผ ๋์๋ณด๋ ๋ฐฉ์์ผ๋ก ํ๋๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ๊ทธ๋์ ํ๋ฒ์ ์ฐพ์ ์ ์์ผ๋ฉด์ ์์๋ฅผ ์ ์ฅํ ์ ์๋ queue๋ฅผ ์ฌ์ฉํ์๋ค. ๋ง์ฝ S๊ฐ ababba์ด๊ณ T๊ฐ ab์ผ ๋ ์ฒซ๋ฒ์งธ a์ ์ฒซ๋ฒ์งธ b๋ ๋ฌถ์ด์ T๋ฅผ ๋ง๋ค์ง ๋๋ฒ์งธ b๋ ๋ฌถ์ง ์๋๋ค๋ ์ ์ ์ด์ฉํ๋ค.
โ๏ธ ํ๊ธฐ
์ฌ์ด ๋ฌธ์ ์๋๋ฐ ๋๋ฌด ์ฝ๊ฒ ํ๋ ค๊ณ ํ๋ค๊ฐ ํ๋ฆฐ๊ฑฐ ๊ฐ๋ค. for๋ฌธ์ผ๋ก ๋ค ํ์ํ๋ ๊ฒ๋ณด๋จ ํ๋ฒ์ ์ฐพ๊ธฐ ์ฝ๊ณ , ์ฒ๋ฆฌํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ฐํด๋ณด๊ณ ํ์ด์ผ๊ฒ ๋ค.
#include <iostream>
#include <queue>
using namespace std;
string s, t;
int ans;
queue<int> q[27];
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> s >> t;
for (int i = 0; i < s.size(); i++) {
q[s[i] - 'a'].push(i);
}
int flag = 1;
while (flag) {
int prev = -1;
int cnt = 0;
for (int i = 0; i < t.size(); i++) {
int idx = t[i] - 'a';
if (q[idx].empty()) {
flag = 0;
break;
}
while (!q[idx].empty()) {
if (q[idx].front() > prev) {
prev = q[idx].front();
q[idx].pop();
cnt++;
break;
}
q[idx].pop();
}
if (cnt == t.size()) {
ans++;
break;
}
}
}
cout << ans;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 4889๋ฒ ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.10.27 |
---|---|
[๋ฐฑ์ค/C++] 21610๋ฒ ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.10.06 |
[๋ฐฑ์ค/C++] 9663๋ฒ N-Queen (0) | 2022.08.16 |
[๋ฐฑ์ค/C++] 16457๋ฒ ๋จํ์ ์ด์ผ๊ธฐ (0) | 2022.08.12 |
[๋ฐฑ์ค/C++] 2239๋ฒ ์ค๋์ฟ (0) | 2022.08.11 |