๋ฌธ์
ํ์ด
์ฝ๋
๊ฒฐ๊ณผ

๋ฌธ์
์ ์์ด๋ ์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด AC๋ฅผ ๋ง๋ค์๋ค. AC๋ ์ ์ ๋ฐฐ์ด์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด ๋ง๋ ์ธ์ด์ด๋ค. ์ด ์ธ์ด์๋ ๋ ๊ฐ์ง ํจ์ R(๋ค์ง๊ธฐ)๊ณผ D(๋ฒ๋ฆฌ๊ธฐ)๊ฐ ์๋ค.
ํจ์ R์ ๋ฐฐ์ด์ ์๋ ์ซ์์ ์์๋ฅผ ๋ค์ง๋ ํจ์์ด๊ณ , D๋ ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค. ๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ D๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํจ์๋ ์กฐํฉํด์ ํ ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, "AB"๋ A๋ฅผ ์ํํ ๋ค์์ ๋ฐ๋ก ์ด์ด์ B๋ฅผ ์ํํ๋ ํจ์์ด๋ค. ์๋ฅผ ๋ค์ด, "RDD"๋ ๋ฐฐ์ด์ ๋ค์ง์ ๋ค์ ์ฒ์ ๋ ์ซ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค.
๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ๊ณผ ์ํํ ํจ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ์ด
- ๊ทธ๋ฅ ๊ตฌํ ๋ฌธ์
- string ํจ์๋ฅผ ์ต๋ํ ์ฌ์ฉํ์ง ์๊ณ ๊ตฌํํด์ ํ๊ธฐ
- ๋งจ ์, ๋ค์์๋ง ์ฝ์ ์ญ์ ๊ฐ ์ผ์ด๋ ๊ฒฝ์ฐ vector๋ณด๋ค deque๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ ๋น ๋ฆ
์ฝ๋
#include <iostream>
#include <string>
#include <deque> // vector ์ฌ์ฉํ๋ฉด ์๊ฐ์ด๊ณผ
#include <algorithm>
using namespace std;
bool handleFunction(deque<int>& arr, char type, bool& isReversed) {
switch (type) {
case 'R':
isReversed = !isReversed;
break;
case 'D':
if (arr.size() < 1) {
cout << "error\n";
return false;
}
else {
if (isReversed) {
arr.pop_back();
}
else {
arr.pop_front();
}
}
}
return true;
}
void printArr(deque<int>& arr, bool& isReversed) {
cout << "[";
if (arr.size() < 1) {
cout << "]\n"; return;
}
if (isReversed) {
cout << arr.back();
arr.pop_back();
while (!arr.empty()) {
cout << "," << arr.back();
arr.pop_back();
}
}
else {
cout << arr.front();
arr.pop_front();
while (!arr.empty()) {
cout << "," << arr.front();
arr.pop_front();
}
}
cout << "]\n";
}
void fetchArr(string& str, deque<int>& arr) {
if (str.size() == 2) return; // []
if (str.size() == 3) { // [n]
arr.push_back(str[1] - '0'); return;
}
// find, substr ์ฌ์ฉํ๋ฉด ์๊ฐ์ด๊ณผ
string num = "";
for (int i = 1; i < str.size(); i++) {
if ('0' <= str[i] && str[i] <= '9') {
num += str[i];
}
else {
arr.push_back(stoi(num));
num = "";
}
}
}
int main() {
// ๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ D => ์๋ฌ
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T; cin >> T;
while (T--) {
string func; cin >> func;
int num; cin >> num;
string arrString; cin >> arrString;
deque<int> arr;
fetchArr(arrString, arr);
bool result = true;
bool isReversed = false; // reverse๋ฅผ ๋ณ์ํ
for (int i = 0; i < func.length(); i++) {
result = handleFunction(arr, func[i], isReversed);
if (!result) break;
}
if (result) {
printArr(arr, isReversed);
}
}
}
๊ฒฐ๊ณผ
์์ด๋ | ๋ฉ๋ชจ๋ฆฌ | ์๊ฐ | ์ฝ๋ ๊ธธ์ด |
---|---|---|---|
gmldms784 | 3080 | 52 | 1693 |
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1253 :: ์ข๋ค (0) | 2021.09.28 |
---|---|
[c++] BOJ 4195 :: ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |
[c++] BOJ 14725 :: ๊ฐ๋ฏธ๊ตด (0) | 2021.09.07 |
[c++] BOJ 3108 :: ๋ก๊ณ (0) | 2021.08.31 |
[c++] BOJ 1027 :: ๊ณ ์ธต ๊ฑด๋ฌผ (0) | 2021.08.31 |
Comment