득이공간

[백준 C++] 5430 AC - 덱 본문

PS/알고리즘 문제풀이

[백준 C++] 5430 AC - 덱

쟁득 2024. 2. 17. 21:31
 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

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

deque<int> Sequence;

void Test()
{
	int N;
	string P, Input;
	cin >> P >> N >> Input;

	int Prev = 1;
	int Next = Input.find(',');
	while (Next != string::npos)
	{
		string Sub = Input.substr(Prev, Next - Prev);
		Sequence.push_back(stoi(Sub));

		Prev = Next + 1;
		Next = Input.find(',', Prev);
	}

	string Sub = Input.substr(Prev, Input.size() - 1);
	if (N != 0)
	{
		Sequence.push_back(stoi(Sub));
	}

	bool Reverse = false;
	for (int i = 0; i < P.size(); ++i)
	{
		switch (P[i])
		{
		case 'R':
			Reverse = !Reverse;
			break;

		case 'D':
			if (Sequence.empty())
			{
				cout << "error\n";
				return;
			}

			if (!Reverse)
			{
				Sequence.pop_front();
			}
			else
			{
				Sequence.pop_back();
			}

			break;
		}
	}

	cout << '[';
	while (!Sequence.empty())
	{
		if (!Reverse)
		{
			cout << Sequence.front();
			Sequence.pop_front();
		}
		else
		{
			cout << Sequence.back();
			Sequence.pop_back();
		}

		if (Sequence.size() != 0)
		{
			cout << ',';
		}
	}
	cout << "]\n";
}

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

	int T;
	cin >> T;
	for (int i = 0; i < T; ++i)
	{
		Test();
	}
}

 

deque와 문자열 파싱을 이용해서 푸는 문제입니다.

 

R을 입력받았을 때 Reverse 여부를 bool 값으로 관리해서

Reverse 값이 참이면 뒤에서부터 D 연산, 출력 연산을 하도록 하고

Reverse 값이 거짓이면 앞에서부터 D 연산과 출력 연산을 수행하도록 했습니다.