반응형
deque 자료구조를 사용해 푸는 문제였습니다.
풀이방법
1. 문자열로 부터 수를 적절히 parsing하여 deque에 저장
2. R이 짝수만큼 입력이라면 이후에 D가 나올 경우 좌측부터 우측순으로 지워지게 됨. 반대의 경우에는 우측에서 좌측순으로 지워짐. 그 방식으로 D가 나올때마다 순서에 맞게 지워나감. 지울 때 이미 deque의 size가 0이라면 error출력
3. D를 모두 수행했을 때 원소가 없으면 빈 배열인 []를 출력.
Code
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int testCase;
deque <int> dq;
int main(){
cin >> testCase;
while(testCase--){
int flag = 0;
int rCount = 0;
int arrayLength;
string arrayString;
string operation;
cin >> operation >> arrayLength >> arrayString;
for(int i = 1; i < arrayString.size(); i++){
string num = "";
while(arrayString[i]!=',' && arrayString[i]!=']') num += arrayString[i++];
if(num!="") dq.push_back(stoi(num));
}
for(int i = 0; i < operation.size(); i++){
if(operation[i] == 'R') rCount++;
else {
if(dq.size()==0) {
flag = 1;
cout << "error";
break;
}
if(rCount % 2 == 0) dq.pop_front();
else dq.pop_back();
}
}
int cnt = 0;
int size = dq.size();
while(dq.size()){
if(cnt==0) cout << "[";
if(rCount % 2 == 0){
cout << dq.front();
dq.pop_front();
}
else{
cout << dq.back();
dq.pop_back();
}
if(cnt==size-1) cout << "]";
else cout << ',';
cnt++;
}
if(flag==0 && size==0) cout << "[]";
cout << '\n';
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 9375번 : 패션왕 신해빈 답 (0) | 2020.10.01 |
---|---|
(C++) - 백준(BOJ) 17608번 : 막대기 답 (0) | 2020.09.20 |
(C++) - 백준(BOJ) 1992번 : 쿼드트리 답 (0) | 2020.09.11 |
(C++) - 백준(BOJ) 18870번 : 좌표 압축 답 (2) | 2020.09.11 |
(C++) - 백준(BOJ) 1780번 : 종이의 개수 답 (0) | 2020.09.11 |