๋ฌธ์
์ ์์ด๋ ์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด AC๋ฅผ ๋ง๋ค์๋ค. AC๋ ์ ์ ๋ฐฐ์ด์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด ๋ง๋ ์ธ์ด์ด๋ค. ์ด ์ธ์ด์๋ ๋ ๊ฐ์ง ํจ์ R(๋ค์ง๊ธฐ)๊ณผ D(๋ฒ๋ฆฌ๊ธฐ)๊ฐ ์๋ค.
ํจ์ R์ ๋ฐฐ์ด์ ์๋ ์ซ์์ ์์๋ฅผ ๋ค์ง๋ ํจ์์ด๊ณ , D๋ ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค. ๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ D๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํจ์๋ ์กฐํฉํด์ ํ ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, "AB"๋ A๋ฅผ ์ํํ ๋ค์์ ๋ฐ๋ก ์ด์ด์ B๋ฅผ ์ํํ๋ ํจ์์ด๋ค. ์๋ฅผ ๋ค์ด, "RDD"๋ ๋ฐฐ์ด์ ๋ค์ง์ ๋ค์ ์ฒ์ ๋ ์ซ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค.
๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ๊ณผ ์ํํ ํจ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. T๋ ์ต๋ 100์ด๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์ํํ ํจ์ p๊ฐ ์ฃผ์ด์ง๋ค. p์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
๋ค์ ์ค์๋ ๋ฐฐ์ด์ ๋ค์ด์๋ ์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๋ค. (0 ≤ n ≤ 100,000)
๋ค์ ์ค์๋ [x1,...,xn]๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ xi ≤ 100)
์ ์ฒด ํ ์คํธ ์ผ์ด์ค์ ์ฃผ์ด์ง๋ p์ ๊ธธ์ด์ ํฉ๊ณผ n์ ํฉ์ 70๋ง์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ error๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
1. ์ ๋ ฅ ๋ฌธ์์ด ์ฒ๋ฆฌ
https://jianna6.tistory.com/entry/C
์ ๋ ฅ ๋ฌธ์๊ฐ [1,2,3,4] ์ด๋ฐ์์ผ๋ก ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ ์ซ์๋ง ๋นผ์ deque์ ๋ฃ์ ๋ฐฉ๋ฒ์ ๊ณ ์ํด์ผ ํ๋ค. ์ฒ์์ ๊ทธ๋ฅ loop๋ฅผ ์ด์ฉํด ํ๋์ฉ ์ฒดํฌํ๋ ค๊ณ ํ์ผ๋ ๊ตฌํํ๊ธฐ ๋๋ฌด ๊ท์ฐฎ์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋์ง ๊ตฌ๊ธ๋งํ๋ค.
์์ ์ฌ๋ ค๋์ ๋งํฌ์ ๋ธ๋ก๊ทธ์์ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์๋ค. (stringstream ์ด์ฉ)
์ ๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์๋ง stream์ ๋ฌธ์์ด์ ๋ณต์ฌํ๊ณ getline์ผ๋ก ',' ๋ฅผ ๊ตฌ๋ถ์๋ก ์ฌ์ฉํด ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋ค์ ๊ธฐ์กด string์ ๋ณต์ฌํด์ฃผ๋ ๋ฐฉ์์ธ ๊ฒ ๊ฐ๋ค. - ์์ธํ๊ฑด ์ฝ๋์ ๋์ ์๋ค.
์ด๋ ์ ๋ ฅ ๋ฌธ์ ์๋ค์ [ ] ๋ ์ ๊ฒฝ์ฐ๊ธฐ ์ซ์ด์ ๊ฐ๋จํ substr๋ฅผ ์ด์ฉํด ์ฒ์๋ถํฐ ๋ฐฐ์ ํ๊ณ ์์ํ๋ค.
2. ํต์ฌ ์๊ณ ๋ฆฌ์ฆ - deque
deque๋ stack๊ณผ queue๋ฅผ ํฉ์ณ๋์ ๊ฒ์ฒ๋ผ ์๋ค ์ฝ์ ๋ฐ ์ ๊ฑฐ๊ฐ ๋ชจ๋ o(1)์ ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก std์ ์๋ deque๋ ๊ทธ ์ธ์๋ vector์ฒ๋ผ index ์ ๊ทผ๋ ๊ฐ๋ฅํ๋ค. ์์ธํ๊ฑด https://blog.encrypted.gg/935?category=773649์ ๋์ ์๋ค!
ํจ์์ ๊ธธ์ด๊ฐ, ์ฆ ์ํํด์ผ ํ๋ ํจ์์ ์๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ 'R' ์ฐ์ฐ์ด ๋์ฌ ๋๋ง๋ค ์ค์ ๋ก ๋ฐฐ์ด(deque)๋ฅผ ๋ค์ง๋ ๊ฒ์ ๋งค์ฐ ๋น ํจ์จ์ ์ด๊ณ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ bool ๋ณ์๋ฅผ ์ด์ฉํด ํ์ฌ ๋ฐฐ์ด(deque)๊ฐ ์ ๋ฐฉํฅ์ธ์ง ์ญ๋ฐฉํฅ์ธ์ง ์ฒดํฌํ๊ธฐ๋ก ํ๋ค. ์ฆ deque์ head๊ฐ front์ธ์ง back์ธ์ง ์์๋ด๋ ๋ณ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, deque์ ์ํ๊ฐ
1(front) 2 3 4(back) ์ด๋ผ๋ฉด D ์ฐ์ฐ์ ํ๋ฉด 1์ด ์ ๊ฑฐ ๋๋ค.
๋ง์ฝ D์ฐ์ฐ์ ์ R์ฐ์ฐ์ ํ๋ค๋ฉด, 4(front) 3 2 1(back) ๊ฐ ๋ ๊ฒ์ด๋ค. ์ด๋ ์ง์ 4 3 2 1 ๋ก ํ๋์ฉ ๋ฐ๊พธ๋๊ฒ ์๋๋ผ ์ค์ deque ๋ 1(front) 2 3 4(back)์ผ๋ก ๊ฐ๋งํ ๋๊ณ , ํ์ฌ bool chk ๋ณ์๊ฐ false๋ผ๋ฉด ์ญ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๊ณ D ์ฐ์ฐ์ pop_front()๋ฅผ ํ๋๊ฒ ์๋๋ผ pop_back()์ ํ๋ฉด 4๊ฐ ๋์ค๊ฒ ๋๋ค.
3. ์ฒดํฌํด์ผ ํ ์
โ ๋น ๋ฐฐ์ด์ []๋ก ์ถ๋ ฅํด์ผ ํ๋ ์ ์ ๊ธฐ์ตํด์ผ ํ๋ค. โ
#include <iostream>
#include <deque>
#include <sstream>
using namespace std;
deque<int> dq;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
string op , arr;
int arrLength;
for (int i = 0; i < n; i++) {
bool chkEmpty = false; // ๋น๋ฐฐ์ด์ด์ง๋ง d ์ฐ์ฐ์ ์ํ๋ ๊ฒฝ์ฐ - error ์๋
bool chk = true; // ์ ๋ฐฉํฅ
cin >> op;
cin >> arrLength >> arr;
// ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ 0์ด๋ฉด ์ด ๊ณผ์ ํ์ ์์
// [1,2,3,4] ์์ ์ซ์๋ง ๋นผ๋ด๋ ๊ณผ์
if (arrLength != 0) {
string arr2 = arr.substr(1, arr.length() - 2); // [, ] ์ ๊ฑฐ
stringstream ss(arr2);
while (ss.good()) {
getline(ss, arr2, ',');
dq.push_back(atoi(arr2.c_str())); // string to int
}
}
for (auto s : op) {
if (s == 'R') { // ์ ๋ฐฉํฅ , ์ญ๋ฐฉํฅ ํ๋จ
if (chk) chk = false;
else chk = true;
}
else if (s == 'D') {
if (dq.empty()) { // ๋น๋ฐฐ์ด์ d ์ฐ์ฐ์ ํ๋ฉด error
cout << "error\n";
chkEmpty = true;
break;
}
if (chk) { // ์ ๋ฐฉํฅ
dq.pop_front();
}
else { // ์ญ๋ฐฉํฅ
dq.pop_back();
}
}
}
// ๋น๋ฐฐ์ด ์ฒ๋ฆฌ
if (!chkEmpty && dq.empty()) {
cout << "[]" << '\n';
}
if (!dq.empty()) {
if (chk) { // ์ ๋ฐฉํฅ
cout << "[";
int dsize = dq.size();
for (int i = 0; i < dsize; i++) {
cout << dq.front();
if (dq.size() == 1) cout << "]\n";
else cout << ",";
dq.pop_front();
}
}
else {
cout << "["; // ์ญ๋ฐฉํฅ
int dsize = dq.size();
for (int i = 0; i < dsize; i++) {
cout << dq.back();
if (dq.size() == 1) cout << "]\n";
else cout << ",";
dq.pop_back();
}
}
}
}
}