문제 : https://www.acmicpc.net/problem/5430


[알고리즘풀이]

R을 만나면 방향을 바꿔서 삽입, 삭제를 진행해야되므로 양방향에서 삽입, 삭제를 할 수 있는 deque(덱)을 이용한다.

deque(덱) 자료구조 설명 : https://www.acmicpc.net/problem/5430

#include<iostream>
#include<string>
#include<deque>

using namespace std;

int main(void){
	int t;
	cin >> t;
	while (t--) {
		deque<int> dq;
		int n, dir = 1;
		bool flag = false;
		string in1, in2;
		cin >> in1 >> n >> in2;
		int i = 1;
		while (i < in2.length()) {
			string temp = "\n";
			while (1) {
				if (in2[i] == ',' || in2[i] == ']')
					break;
				else{
					temp += in2[i];
					i++;
				}
			}
			if (temp == "\n") {
				break;
			}
			else{
				dq.push_back(stoi(temp));
				i++;
			}
		}

		for (int i = 0; i < in1.length(); i++) {
			if (in1[i] == 'D') {
				if (dq.empty()) {
					cout << "error\n";
					flag = true;
					break;
				}
				else if (dir) 
					dq.pop_front();
				else
					dq.pop_back();
			}
			if (in1[i] == 'R') {
				if (dir)
					dir = 0;
				else
					dir = 1;
			}
		}
		if (flag)
			continue;
		if (dir) {
			cout << '[';
			while (!dq.empty()) {
				if (dq.size() == 1)
					cout << dq.front();
				else{
					cout << dq.front() << ',';
				}
				dq.pop_front();

			}
			cout << "]\n";
		}
		else {
			cout << '[';
			while (!dq.empty()) {
				if (dq.size() == 1)
					cout << dq.back();
				else {
					cout << dq.back() << ',';
				}
				dq.pop_back();
			}
			cout << "]\n";
		}
	}

}

 

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 10773 - Zero That Out  (0) 2019.09.19
[BOJ] 10828 - 스택  (0) 2019.09.19
[BOJ] 1021 - 회전하는 큐  (0) 2019.09.17
[BOJ] 10866 - 덱  (0) 2019.09.17
[BOJ] 1966 - Printer Queue  (0) 2019.09.17

+ Recent posts