https://www.acmicpc.net/problem/5430
백준 5430번 AC를 풀어봤습니다.
자료구조 deque를 사용해서 배열을 뒤집는 연산을 하지 않고 pop_back()과 pop_front()로 R연산을 해줬습니다.
아래는 전체 코드입니다.
#include <iostream>
#include <deque>
#include <algorithm>
#include <string>
using namespace std;
deque<int> dq;
string ans[100];
bool funtion(string work, deque<int>& dq, bool *isReverse) {
for (int i = 0; i < work.size(); i++) {
if (work[i] == 'R') {
if (*isReverse == 1)
*isReverse = 0;
else
*isReverse = 1;
}
if (work[i] == 'D') {
if (dq.size() == 0) {
cout << "error\n";
return true;
}
if (*isReverse == 1) {
dq.pop_back();
}
else {
dq.pop_front();
}
}
}
return false;
}
int main() {
int t;
cin >> t;
for (int i = 0; i < t; i++) {
string work;
int n;
string arr_int;
int temp = 0;
cin >> work >> n >> arr_int;
for (int j = 0; j < arr_int.size(); j++) {
if (n == 0)
break;
if (isdigit(arr_int[j])) {
temp++;
dq.push_back(arr_int[j] - 48);
if (temp == 2) {
int x = dq.back();
dq.pop_back();
int y = dq.back();
dq.pop_back();
dq.push_back(10 * y + x);
}
else if (temp == 3) {
int x = dq.back();
dq.pop_back();
int y = dq.back();
dq.pop_back();
dq.push_back(10 * y + x);
}
}
else {
temp = 0;
}
}
bool isReverse = 0;
int isError = funtion(work, dq, &isReverse);
if (isError == 1) {
// Do nothing
}
else {
cout << '[';
if (isReverse == 0) {
for (int i = 0; i < dq.size(); i++) {
if (dq.size() == 1)
cout << dq[i];
else if (dq.size() != 1) {
if (i == dq.size() - 1) {
cout << dq[i];
}
else {
cout << dq[i] << ',';
}
}
}
}
else {
for (int i = 0; i < dq.size(); i++) {
if (dq.size() == 1)
cout << dq[dq.size() - i -1];
else if (dq.size() != 1) {
if (i == dq.size()-1) {
cout << dq[dq.size() - i - 1];
}
else {
cout << dq[dq.size() - i - 1] << ',';
}
}
}
}
cout << ']' << '\n';
}
dq.clear();
}
}
'알고리즘 > PS' 카테고리의 다른 글
[C++] 백준 1932 : 정수 삼각형 (0) | 2022.04.01 |
---|---|
[C++] 백준 1149 : RGB거리 (0) | 2022.03.31 |
[C++] 백준 1504 : 특정한 최단경로 (0) | 2022.03.29 |
[C++] 백준 2580 : 스도쿠 (0) | 2022.03.29 |
[C++] 백준 9663 : N-Queen (0) | 2022.03.29 |