1. str splite : substr을 이용해 '['와']'를 제거한 후 getline을 이용해서 받은 문자열을 splite 했다.
2. 명령 문자열(inst)를 순회하면서 reverse여부에 따라 앞에서 pop해야하는 횟수와 뒤에서 pop해야 하는 횟수를 카운팅한다.
3. pop의 횟수가 nums.size()보다 클 경우는 error를 출력한다.
4. 그렇지 않은 경우에는 카운팅한 값을 토대로 pop을 진행한 뒤 result 문자열을 만들어 출력한다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <deque>
#include <sstream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 0;
cin >> t;
while(t--){
string inst, str, buffer;
char delim = ',';
deque<string> nums;
int n, front_count = 0, back_count = 0;
bool isReverse = false;
cin >> inst >> n >> str;
//str splite
str = str.substr(1, str.size() - 2);
stringstream f(str);
while (getline(f, buffer, delim))
{
nums.push_back(buffer);
}
//inst 순회하며 카운팅.
for (int i = 0; i < inst.size(); i++)
{
if(inst[i]=='R')
isReverse = !isReverse;
else{
if(isReverse)
back_count++;
else
front_count++;
}
}
//result print
if (back_count + front_count > nums.size())
{
cout << "error" << endl;
}
else
{
string result = "[";
bool isFirst = true;
//nums pop
for (int i = 0; i < front_count; i++)
nums.pop_front();
for (int i = 0; i < back_count; i++)
nums.pop_back();
//result string 만들기
if(isReverse){
for (int i = nums.size() - 1; i >= 0; i--)
{
if(!isFirst){
result += ",";
}else{
isFirst = false;
}
result += nums[i];
}
}else{
for (int i = 0; i < nums.size(); i++){
if(!isFirst){
result += ",";
}else{
isFirst = false;
}
result += nums[i];
}
}
//print
result += "]";
cout << result << "\n";
}
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준] 14500 테트로미노 c++ (0) | 2022.12.24 |
---|---|
[백준] 5525번 IOIOI c++ (0) | 2022.12.10 |
[백준] 10026번 적록색양 c++ (0) | 2022.11.30 |
[백준] 1992번 쿼드트리 c++ (0) | 2022.11.29 |
[백준] 4485번 녹색 옷 입은 애가 젤다지? c++ (0) | 2022.11.28 |