[문제]
https://www.acmicpc.net/problem/5430
[풀이]
deque을 이용.
reverse boolean 값을 선언해두고 배열이 뒤집어진 상태인지를 반영한 후, 'D'에 대해 뒤집어진 상태이면 deq.pop_back() 함수를, 뒤집어지지 않은 상태이면 deq.pop_front() 함수를 사용한다.
마찬가지로 출력 시에도 배열이 뒤집어진지 확인한 후 deque의 앞 혹은 뒤에서부터 출력해준다.
[코드]
#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
int t;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
string fun, arr;
for(int i=0; i<t; i++){
cin >> fun; //RD 함수
int len;
cin >> len; //숫자 개수
cin >> arr; //배열
deque<int> deq;
string s = "";
for(int j=0; j<arr.length(); j++){
if(isdigit(arr[j])){
s += arr[j];
}
else{
if (!s.empty()){
deq.push_back(stoi(s));
s.clear();
}
}
}
bool error = false, reverse = false;
for (auto f : fun){
if(f=='R'){
if(reverse)
reverse = false;
else reverse = true;
}
else{
if(deq.empty()){
cout << "error\n";
error = true;
break;
}
if(reverse)
deq.pop_back();
else
deq.pop_front();
}
}
if(!error) {
cout << "[";
if (!deq.empty() && reverse){
while(!deq.empty()){
cout << deq.back();
deq.pop_back();
if(!deq.empty())
cout << ",";
}
}
if( !deq.empty() && !reverse){
while(!deq.empty()){
cout << deq.front();
deq.pop_front();
if(!deq.empty())
cout << ",";
}
}
cout << "]\n";
}
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[boj] 백준 14890 경사로 (c++) - 구현 (0) | 2022.09.15 |
---|---|
[boj] 백준 1238 파티 (c++) - 다익스트라 (1) | 2022.09.13 |
[boj] 백준 11403 경로 찾기 (c++) - 플로이드 워셜 (0) | 2022.09.06 |
[boj] 백준 14888 연산자 끼워넣기 (c++) - 백트래킹 (0) | 2022.08.31 |
[boj] 백준 11052 카드 구매하기 (c++) - dp (0) | 2022.08.30 |