[백준/BOJ] 백준 5430번 : AC

2020. 8. 29. 01:58알고리즘 문제풀이

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

 

5430번: AC

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

www.acmicpc.net

deque에 숫자들을 저장하고, bool front_check을 만들어 함수가 R이면 front_check를 바꿔준다. 그리고 front_check가 true이면 함수가 D일 때 앞의 숫자를 빼고, false이면 함수가 D일 때 뒤의 숫자를 뺀다. 결과를 출력할 때 front_check가 true이면 dq의 앞의 숫자부터 출력하고 false이면 뒤의 숫자부터 출력한다.

 

코드

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

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

	int tc;
	string p;
	int n;
	string input;
	deque<int> dq;

	cin >> tc;

	for (int t = 0; t < tc; t++)
	{
		dq.clear();

		cin >> p;
		cin >> n;
		cin >> input;

		//숫자들을 분리해서 dq에 저장한다
		string temp = "";
		for (int i = 0; i < input.size(); i++)
		{
			if (input[i] >= '0' && input[i] <= '9')
			{
				temp += input[i];
			}

			else
			{
				if (temp.size() != 0)
				{
					dq.push_back(stoi(temp));

					temp = "";
				}

				else
					temp = "";
			}
		}

		//R이면 front_check를 바꿔준다
		//front_check가 true이면 D일때 앞에 숫자를 빼고, false이면 D일때 뒤의 숫자를 뺀다
		bool front_check = true;
		bool error_check = false;
		for (int i = 0; i < p.size(); i++)
		{
			if (p[i] == 'R')
			{
				if (front_check)
					front_check = false;
				else
					front_check = true;
			}

			else if (p[i] == 'D')
			{
				if (dq.empty()) //dq가 비어 있을때
				{
					cout << "error" << "\n";
					error_check = true;
					break;
				}
				if (front_check)
					dq.pop_front();
				else
					dq.pop_back();
			}
		}

		if (error_check)
			continue;

		//front_check가 true이면 dq의 앞의 숫자부터 출력하고 false이면 뒤의 숫자부터 출력한다
		if (front_check)
		{
			cout << "[";
			while (!dq.empty())
			{
				cout << dq.front();
				dq.pop_front();

				if (!dq.empty())
					cout << ",";
			}
			cout << "]";
			cout << "\n";
		}

		else
		{
			cout << "[";
			while (!dq.empty())
			{
				cout << dq.back();
				dq.pop_back();

				if (!dq.empty())
					cout << ",";
			}
			cout << "]";
			cout << "\n";
		}
	}

	return 0;
}