문자열로 주어진 숫자배열을 숫자만 추출해서 deque에 넣어야 했다.
숫자가 여러자리 수인 경우가 있다. 그래서 숫자인 문자를 이어붙이고, 특수문자가 나오면 숫자인 문자열을 stoi()로 정수로 바꿨다.
함수를 순회할 때,
D 일 때도 그렇고 R일 때도 deque가 비어있는건지를 확인해야한다. 이것때문에 계속 틀렸었다.
#include <bits/stdc++.h>
using namespace std;
int t, n;
string func, arr;
void check(string f, int n, string arr){
string answer = "";
bool flag = true;
bool reverse_flag = false;
deque<int> dq;
string st_digit = "";
for(int i = 0; i < arr.length(); i++){
if(isdigit(arr[i])){
st_digit += arr[i];
}else{
if(!st_digit.empty()){
dq.push_back(stoi(st_digit));
st_digit = "";
}
}
}
for(auto o : f){
if(o == 'R') reverse_flag = !reverse_flag;
else {
if(dq.empty()) { flag= false; cout << "error\n"; break; }
if(reverse_flag) dq.pop_back();
else dq.pop_front();
}
}
if(flag){ // error 아닌 경우에만 배열 출력
cout << "[";
if(reverse_flag){ // 뒤집혀있다면,
for(auto d = dq.rbegin(); d != dq.rend(); d++){
if(d == dq.rend()-1) {
cout << *d;
}
else { cout << *d << ","; }
}
}else{
for(auto d = dq.begin(); d != dq.end(); d++){
if(d == dq.end()-1) {
cout << *d;
}
else { cout << *d << ","; }
}
}
cout << "]\n";
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> t;
while(t--){
cin >> func >> n >> arr;
check(func, n, arr);
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
수열 백준 2559번 c++ (0) | 2022.05.24 |
---|---|
수들의 합2 백준 2003번 c++ (0) | 2022.05.24 |
뱀과 사다리 게임 백준 16928번 c++ (0) | 2022.03.02 |
조합 백준 2407번 c++ (0) | 2022.03.02 |
완전제곱수 백준 1977번 c++ (0) | 2022.02.28 |