Algorithm

[BOJ][C++]9019 DSLR

도라프 2022. 7. 11. 03:00

https://www.acmicpc.net/problem/9019

 

9019번: DSLR

네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에

www.acmicpc.net

#include <iostream>
#include <deque>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	int T; cin >> T;
	while (T--) {
		string p; cin >> p;
		int n; cin >> n;
		string arr; cin >> arr;
		deque<string> dq;
		bool isReversed = false;
		bool isError = false;

		string num;
		for (int i = 1; i < arr.length(); i++) {
			if (num != "" && (arr[i] == ',' || arr[i] == ']')) {
				dq.push_back(num);
				num = "";
				continue;
			}
			num += arr[i];
		}

		for (int i = 0; i < p.length(); i++) {
			if (p[i] == 'R') isReversed = !isReversed;
			else {
				if (dq.empty()) {
					isError = true;
					break;
				}
				if (!isReversed) dq.pop_front();
				else dq.pop_back();
			}
		}

		if (isError) {
			cout << "error\n";
			continue;
		}

		cout << '[';
		if (isReversed) {
			for (auto i = dq.rbegin(); i < dq.rend(); i++) {
				cout << *i;
				if (i != dq.rend() - 1) cout << ',';
			}
		}
		else {
			for (auto i = dq.begin(); i < dq.end(); i++) {
				cout << *i;
				if (i != dq.end() - 1) cout << ',';
			}
		}
		cout << "]\n";
	}
	return 0;
}