> [!date] published: 2022-04-02 [5430๋ฒˆ: AC](https://www.acmicpc.net/problem/5430) ## ๐ŸŒŸ ๋ฌธ์ œ ์„ ์˜์ด๋Š” ์ฃผ๋ง์— ํ•  ์ผ์ด ์—†์–ด์„œ ์ƒˆ๋กœ์šด ์–ธ์–ด AC๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. AC๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด ์–ธ์–ด์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜ R(๋’ค์ง‘๊ธฐ)๊ณผ D(๋ฒ„๋ฆฌ๊ธฐ)๊ฐ€ ์žˆ๋‹ค. ํ•จ์ˆ˜ R์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜์ด๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•จ์ˆ˜๋Š” ์กฐํ•ฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "AB"๋Š” A๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์— ๋ฐ”๋กœ ์ด์–ด์„œ B๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "RDD"๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋‹ค์Œ ์ฒ˜์Œ ๋‘ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ## ๐ŸŒŸ ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. T๋Š” ์ตœ๋Œ€ 100์ด๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. p์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค n โ‰ค 100,000) ๋‹ค์Œ ์ค„์—๋Š” \[x<sub>1</sub>,...,x<sub>n</sub>\]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค x<sub>i</sub> โ‰ค 100) ์ „์ฒด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง€๋Š” p์˜ ๊ธธ์ด์˜ ํ•ฉ๊ณผ n์˜ ํ•ฉ์€ 70๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ## ๐ŸŒŸ ์ถœ๋ ฅ ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ## ๐ŸŒŸ ํ’€์ด ์ด ๋ฌธ์ œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์ˆœ์„œ๋ฅผ ์ด๋ฆฌ์ €๋ฆฌ ๋ฐ”๊พธ๋Š” ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„๊ณผ, ๋ฌธ์ž์—ด ํŒŒ์‹ฑํ•˜๋Š” ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฆฌ์ €๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๊ณ , ๋ฐ”๋€ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์•ž๋’ค๋กœ ์›์†Œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›์†Œ๋Š” deque๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  `front_op` ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ 1์ผ๋•Œ๋Š” front๋ฅผ ์•ž์œผ๋กœ ํ•˜๊ณ , -1์ผ๋•Œ๋Š” back์„ ์•ž์œผ๋กœ ํ•˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค. ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„ ์—ญ์‹œ `front_op` ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ frontํ˜น์€ back๋ถ€ํ„ฐ ์ถœ๋ ฅํ•ด์คฌ๋‹ค. ๋ฐฐ์—ด์ด ์ž…๋ ฅ๋  ๋•Œ ๋‹จ์ˆœํžˆ ์ˆซ์ž๋งŒ ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ '\['์™€ ']', ','๊ฐ€ ๊ฐ™์ด ์ž…๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— string ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์ˆซ์ž๋ถ€๋ถ„๋งŒ ์ž˜๋ผ๋‚ด๋Š” ๋ฌธ์ž์—ด ํŒŒ์‹ฑ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋Œ๋ฉด์„œ, ์ฒ˜์Œ ์ˆซ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„๊นŒ์ง€์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์—ฌ `substr`์„ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ธธ์ด๋งŒํผ ์ž˜๋ผ๋‚ธ ๋‹ค์Œ์— ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์›์†Œ๋“ค์„ deque์— ๋„ฃ์–ด ์ฃผ์—ˆ๋‹ค. (์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ๊ฒŒ ๋” ์„ค๋ช…์ด ์ž˜ ๋  ๋“ฏ ํ•˜๋‹ค. (`make_deque` ํ•จ์ˆ˜)) ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋œ ๋ช…๋ น์–ด๋Œ€๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๊ณ  (R) ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  (D) ๊ทธ ๋’ค์— ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ํ˜•์‹๋Œ€๋กœ ์ถœ๋ ฅ์„ ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค. ๋‚˜๋Š” ์ด ๋ถ€๋ถ„์—์„œ ์ž๊พธ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์—ˆ๋Š”๋ฐ... ๋งŒ์•ฝ์— ๋ช…๋ น์–ด๋ฅผ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•œ ๋’ค์— deque๊ฐ€ ๋น„์–ด ์žˆ๋‹ค๋ฉด `[]` ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋‚ด๊ฐ€ ๊ธฐ์กด์— ์ง  ์ถœ๋ ฅํ•จ์ˆ˜์—์„œ๋Š” ์›์†Œ๊ฐ€ ์ ์–ด๋„ 1๊ฐœ๋Š” ์žˆ์–ด์•ผ ์ถœ๋ ฅ์ด ์ •์ƒ์ ์œผ๋กœ ๋˜๊ฒŒ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—... deque๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค. ## ๐ŸŒŸ ์ฝ”๋“œ ```cpp /* 2022-4-2 5430_AC https://www.acmicpc.net/problem/5430 */ #include <iostream> #include <string> #include <deque> using namespace std; deque<int> q; void make_deque(int n, string x) { int i, j; i = 1; while(!q.empty()) q.pop_front(); while (q.size() < n) { if (x[i] >= '0' && x[i] <= '9') { j = i + 1; while (x[j] >= '0' && x[j] <= '9' && j < x.length()) j++; q.push_back(stoi(x.substr(i, j-i))); i = j; } i++; } } int do_ac(string p) { int front_op = 1; // 1: ์ •๋ฐฉํ–ฅ, -1: ์—ญ๋ฐฉํ–ฅ for(int i = 0; i < p.length(); i++) { if (p[i] == 'R') front_op *= -1; else { if (q.empty()) { cout << "error\n"; return (0); } else if (front_op == 1) q.pop_front(); else q.pop_back(); } } return (front_op); } void print_deque(int front_op) { cout << '['; if (q.empty()) { cout << "]\n"; return ; } if (front_op == 1) { while (q.size() > 1) { cout << q.front() << ','; q.pop_front(); } cout << q.front() << "]\n"; q.pop_front(); } else { while (q.size() > 1) { cout << q.back() << ','; q.pop_back(); } cout << q.back() << "]\n"; q.pop_back(); } } void AC() { string p, x; int n, front_op; cin >> p; cin >> n; cin >> x; make_deque(n, x); front_op = do_ac(p); if (front_op == 0) return ; print_deque(front_op); } int main() { int t; cin >> t; for(int i = 0; i < t; i++) AC(); return (0); } ```