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)
๋ค์ ์ค์๋ [x1,...,xn]๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ xi ≤ 100)
์ ์ฒด ํ ์คํธ ์ผ์ด์ค์ ์ฃผ์ด์ง๋ p์ ๊ธธ์ด์ ํฉ๊ณผ n์ ํฉ์ 70๋ง์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ error๋ฅผ ์ถ๋ ฅํ๋ค.
์ผ๋จ ์ฒ์์ vector๋ก ์๊ฐ๋ณต์ก๋ ๊ณ ๋ ค์ํ๊ณ reverse ์ผ๋ค๊ฐ ์๊ฐ์ด๊ณผ๋ก ํผ๋จ.
๊ทธ๋ฆฌ๊ณ reverse ํจ์๊ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด๋ผ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค๋ ๊ฑธ ํ์ธํ๊ณ ,
'R'์ ์ฌ์ฉํ ๋ ๊ทธ๋ฅ bool ๋ณ์๊ฐ๋ง ๋ณ๊ฒฝํด์ 'D'์ผ๋ ์์์ v.erase ํ๊ฑฐ๋ v.pop_back์ ํด์ฃผ์๋๋ฐ ์ด๊ฒ๋ ์๊ฐ์ด๊ณผ.
๊ฒฐ๊ตญ.... ๊ตฌ๊ธ๋ง์ผ๋ก
๋ฒกํฐ์ ์ ์์๋ฅผ ์ง์ธ๋๋ ์ ํ์๊ฐ์ด ๋ค๊ธฐ ๋๋ฌธ์
์์ชฝ์์ pop์ ํ ์ ์๋ deque๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์จ์ผ๋ง ํ๋ค๋ ๊ฒ์ ์์๋์ต๋๋ค.
์ด๊ฒ ์ ๊ณจ๋5 ๋ฌธ์ ๋ ํ๋๋ฐ.. ๊ณจ๋ ๋ง๋ค.
๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ ์์ ์๊ฐ์ ๋ฐฐ์ด ๊ฐ๋ ์ธ๋ฐ, ์ธ ์ผ์ด ์์ผ๋ ค๋ ํ๊ณ ๊ฐ๋ณ๊ฒ ๋๊ฒผ๋ ๋ด์ฉ์
์ฌ๊ธฐ์ ์จ๋จน์์ค์ด์ผ ใ ใ กใ ์ ์์๋์ผ๊ฒ ๋ค
๋์ ํ์ด
#include <iostream>
#include <string>
#include <deque>
#include <algorithm>
using namespace std;
string p = "";
int n;
string xstring = "";
deque<int> x;
void findxnum(string xstring){
x.clear();
string tmp = "";
for (int i = 0; i < xstring.length(); ++i){
if (xstring[i] == '[') continue;
if(xstring[i]==',' || xstring[i] == ']'){
if(tmp.length()>0){
int a = stoi(tmp);
x.push_back(a);
tmp = "";
}
continue;
}
tmp += xstring[i];
}
return;
}
void AC(){
bool rev = false;
for (int i = 0; i < p.length(); ++i){
if(n==0){
if(p[i]=='D'){
cout << "error\n";
return;
}
if(p[i]=='R'){ // ๋น์์๋๋ R๋ ์ฒ๋ฆฌํ์
continue;
}
}
if(p[i]=='D'){
n--;
// cout << n << " / ";
if (rev) x.pop_back();
else x.pop_front();
}
if(p[i]=='R'){
// reverse(x.begin(), x.end()); // ์๊ฐ์ด๊ณผ
if(rev) rev = false;
else rev = true;
}
}
cout << "[";
if(!rev){
for (int i = 0; i < x.size(); ++i){
if(i == x.size()-1){
cout << x[i];
break;
}
cout << x[i] << ",";
}
}
else{
for (int i = x.size()-1; i >= 0; --i){
if(i == 0){
cout << x[i];
break;
}
cout << x[i] << ",";
}
}
cout << "]\n";
return;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
for (int i = 0; i < t; ++i){
cin >> p;
cin >> n >> xstring;
findxnum(xstring);
AC();
}
return 0;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 9012 : ๊ดํธ (์๋ฃ๊ตฌ์กฐ) (1) | 2023.05.06 |
---|---|
[C++/BOJ] 11286 : ์ ๋๊ฐ ํ (์๋ฃ๊ตฌ์กฐ) (0) | 2023.05.02 |
[C++/BOJ] 7576 : ํ ๋งํ (bfs/dfs) (0) | 2023.04.14 |
[C++/BOJ] 1107 : ๋ฆฌ๋ชจ์ปจ (์์ ํ์) (0) | 2023.04.14 |
[C++/BOJ] 16236 : ์๊ธฐ ์์ด (bfs/dfs) (0) | 2023.04.13 |