https://www.acmicpc.net/problem/5430
문제는 간단하다
숫자 리스트를 입력받은 후, R이면 리스트의 순서를 뒤집어주고 D면 맨 앞 원소를 버린다.
덱을 이용하면 굳이 리스트의 순서를 뒤집어줄 필요 없이 pop의 방향만 바꾸어 주면 된다.
따라서 pop의 방향을 저장할 direct라는 bool형 변수를 선언한 뒤,
R일때는 direct의 값을 바꿔주고
D일 때는 direct에 따라 pop_front 또는 pop_back 해주면 된다.
그러나 입력 받은 리스트 문자열을 덱에 넣어주는 작업이 번거롭다ㅜㅜ 이부분만 잘 구현해줄 것
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
string p;
int n;
bool direct; // 1: 정방향, 0: 역방향
deque<int> d;
string temp;
cin >> p >> n >> temp;
direct = 1;
// 변환----------------------------------
string num;
for (int i = 0; i < temp.length(); i++) {
if (temp[i] >= '0' && temp[i] <= '9') {
num += temp[i];
}
else if (!num.empty()) {
d.push_back(stoi(num));
num.clear();
}
}
// 함수 계산----------------------------
int i;
for (i = 0; i < p.length(); i++) {
if (p[i] == 'R') {
direct = !direct;
}
else if (p[i] == 'D') {
if (d.empty()) break;
if (direct) {
d.pop_front();
}
else {
d.pop_back();
}
}
}
// 프린트--------------------------------
if (i == p.length()) {
printf("[");
while (!d.empty()) {
if (direct) {
printf("%d", d.front());
d.pop_front();
}
else {
printf("%d", d.back());
d.pop_back();
}
if (d.empty()) break;
printf(",");
}
printf("]\n");
}
else {
printf("error\n");
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1935번: 후위 표기식2 (0) | 2020.03.19 |
---|---|
[백준] 1918번: 후위 표기식 (0) | 2020.03.19 |
[백준] 3078번: 좋은 친구 (0) | 2020.03.19 |
[백준] 10993번: 별 찍기 - 18 (0) | 2020.03.15 |
[백준] 3190번: 뱀 (0) | 2020.03.12 |