ํญ๋ฐ, ์ง์ง๊ธฐ ๋ฌธ์ ๋ stack์ ๋ ์ฌ๋ฆฌ์.
[๋ฌธ์ ]
https://www.acmicpc.net/problem/9935
๋ฌธ์์ด์ ํญ๋ฐ ๋ฌธ์์ด์ด ์๋ค.
ํญ๋ฐ ๋ฌธ์์ด์ด ํญ๋ฐํ๋ฉด ๊ทธ ๋ฌธ์๋ ๋ฌธ์์ด์์ ์ฌ๋ผ์ง๋ฉฐ, ๋จ์ ๋ฌธ์์ด์ ํฉ์ณ์ง๊ฒ ๋๋ค.
๋ชจ๋ ํญ๋ฐ์ด ๋๋ ํ์ ์ด๋ค ๋ฌธ์์ด์ด ๋จ๋์ง ๊ตฌํด๋ณด์. ๋จ์์๋ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ "FRULA"๋ฅผ ์ถ๋ ฅํ์.
๋ฌธ์์ด์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
ํญ๋ฐ ๋ฌธ์์ด์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 36๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
๋ ๋ฌธ์์ด์ ๋ชจ๋ ์ํ๋ฒณ ์๋ฌธ์์ ๋๋ฌธ์, ์ซ์ 0, 1, ..., 9๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
[ํ์ด]
๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋งค์ฐ ๊ธฐ๋ฏ๋ก, ์์ ํ์์ผ๋ก๋ ํ ์ ์๋ค.
๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํด stack ์๋ฃ๊ตฌ์กฐ๋ erase ํจ์๋ฅผ ์ด์ฉํ์ฌ for๋ฌธ ํ๋๋ก ๋๋ด์ผ ํ๋ค.
1๋ฒ ํ์ด
- stack์ ์ด์ฉํด์ stack ํฌ๊ธฐ๊ฐ ํญ๋ฐ ๋ฌธ์์ด ํฌ๊ธฐ๋ณด๋ค ์ปค์ก์ผ๋ฉด ๋น๊ต ์์ํ๋ค.
- stack ์ ๋งจ ์ ๊ธ์์ ํญ๋ฐ ๋ฌธ์์ด์ ๋งจ ๋์๊ฐ ๊ฐ์์ง ํ์ธํ๋ค.
- ๊ฐ๋ค๋ฉด ํญ๋ฐ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋นผ์ stack ์์ ๋ฌธ์์ด ๋น๊ตํ๋ค.
- 3์์ stack ๋ฌธ์์ด์ ๋ค์ง์ด์ ธ ์์ผ๋๊น reverse ํจ์๋ก ๋ค์ง๋๋ค.
- ๋ค๋ฅด๋ฉด ๋ค์ ์ง์ด๋ฃ๋๋ค. ๊ฐ์ผ๋ฉด ๋บ ์ํ์ด๋ฏ๋ก ๋๊ธด๋ค.
- stack์ ๋ค์ด์๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ฉด ๋.
#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
//ํญ๋ฐ, ์ง์ง๊ธฐ => stack
int main() {
string origin_str, bumb_str, answer_str = ""; //Input ๋ฌธ์์ด, ํด๋ฐ ๋ฌธ์์ด, ์ ๋ต ๋ฌธ์์ด
stack<char> stk; // ํญ๋ฐ ๋ฌธ์์ด๊ณผ์ ๋น๊ต๋ฅผ ์ํ stack
cin >> origin_str >> bumb_str;
//stack ์ ์ด์ฉํ ๋ฌธ์์ด๋น๊ต
for (char s : origin_str) {
stk.push(s); // ์ผ๋จ stack ์ ๋ฌธ์์ด ์ฐจ๋ก๋ก ๋ฃ๊ธฐ
if (stk.size() >= bumb_str.size()) { //stack ํฌ๊ธฐ๊ฐ ํญ๋ฐ ๋ฌธ์์ด ํฌ๊ธฐ๋ณด๋ค ์ปค์ก์ผ๋ฉด ๋น๊ต ์์
char stack_end = stk.top(); // stack ์ ๋งจ ์ ๊ธ์์
char bumb_end = bumb_str[bumb_str.size() - 1]; // ํญ๋ฐ ๋ฌธ์์ด์ ๋งจ ๋์๊ฐ ๊ฐ์์ง ํ์ธ
if (stack_end == bumb_end) { // ๊ฐ๋ค๋ฉด ํญ๋ฐ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋นผ์ stack ์์ ๋ฌธ์์ด ๋น๊ต
string compare_str = "";
for (char i : bumb_str) {
compare_str += stk.top();
stk.pop();
}
reverse(compare_str.begin(), compare_str.end()); // stack ๋ฌธ์์ด์ ๋ค์ง์ด์ ธ ์์ผ๋๊น ํ๋ฒ ๋ค์ง๊ธฐ
if (bumb_str != compare_str) { //๋ค๋ฅด๋ฉด ๋ค์ ์ง์ด๋ฃ๊ธฐ ๊ฐ์ผ๋ฉด ๋บ ์ํ์
for (int i : compare_str) {
stk.push(i);
}
}
}
}
}
//์ถ๋ ฅ
if (stk.size() == 0) cout << "FRULA";
else {
while (stk.size()) {
answer_str += stk.top(); stk.pop();
}
reverse(answer_str.begin(), answer_str.end());// stack ๋ฌธ์์ด์ ๋ค์ง์ด์ง ์ํ๋๊น ํ๋ฒ ๋ค์ง๊ธฐ
cout << answer_str;
}
return 0;
}
*2๋ฒ ํ์ด
- ์ผ๋จ ์ ๋ ฅ ๋ฌธ์์ด์ ํ๋์ฉ ์ ๋ต ๋ฌธ์์ด์ ๋ฃ๋๋ค.
- ์ ๋ต ๋ฌธ์์ด์ด ํญ๋ฐ ๋ฌธ์์ด๋ณด๋ค ๊ธธ์ด๊ฐ ํฌ๊ฑฐ๋ ๊ฐ์์ง๋ฉด ๋น๊ต๋ฅผ ์์ํ๋ค.
- ํญ๋ฐ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋ท ๊ธ์ ์ถ์ถํ๋ค.
- ์ถ์ถํ ๋ฌธ์์ด๊ณผ ํญ๋ฐ ๋ฌธ์์ด์ด ํ์ธํ๋ค. ๊ฐ์ผ๋ฉด erase ํจ์๋ก ์ ๊ฑฐํ๋ค.
#include <iostream>
#include <string>
using namespace std;
const string NULL_TEXT = "FRULA";
int main() {
string origin_str, bumb_str, answer_str = "";
cin >> origin_str >> bumb_str;
for (char s : origin_str) {
answer_str += s;
if (answer_str.size() >= bumb_str.size()) {
string end_str = answer_str.substr(answer_str.size() - bumb_str.size(), bumb_str.size());
if (end_str == bumb_str) {
answer_str.erase(answer_str.end() - bumb_str.size(), answer_str.end());
}
}
}
if (answer_str.size()) cout << answer_str << "\n";
else cout << NULL_TEXT << "\n";
return 0;
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][BOJ] 2343 ๊ธฐํ ๋ ์จ (feat. ์ด๋ถํ์) (0) | 2024.05.23 |
---|---|
[C++][BOJ] 2792๋ฒ ๋ณด์ ์์(feat. ์ด๋ถ ํ์) (0) | 2024.05.21 |
[C++][BOJ] 1931 ํ์์ค ๋ฐฐ์ :: ๋ผ์ธ ์ค์ํ (0) | 2024.05.15 |
[C++][BOJ] 2109 ์ํ๊ฐ์ฐ :: ๊ทธ๋ฆฌ๋(Greedy) (0) | 2024.05.14 |
[C++][Baekjoon][map] 1620 ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ(map/arr ์๊ฐ๋ณต์ก๋, map value๋ก key์ฐพ๊ธฐ) (0) | 2024.04.14 |