5430번: AC

Memo


로직 설명

Code


제출 날짜

2021/05/13

메모리

3708 KB

시간

20 ms

#include <iostream>
#include <string>
#include <algorithm>
#define endl "\\n"
int T, n;
std::string p, arr;
int x[100001];
std::string ans;
int start, end, reverse;

void io_faster()
{
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
}

void input()
{
	io_faster();
	std::cin >> T;
}

bool is_num(char ch)
{
	if ('0' <= ch && ch <= '9')
		return (1);
	return (0);
}

void parsing()
{
	int i = 0;
	int size = arr.size();
	int save = 0;
	int x_ind = 0;

	while (++i < size)
	{
		if (is_num(arr[i]))
		{
			save *= 10;
			save += (arr[i] - '0');
		}
		else
		{
			x[x_ind++] = save;
			save = 0;
		}
	}
}

bool operation()
{
	start = 0;
	end = n - 1;
	reverse = 1;

	for (size_t i = 0 ; i < p.size() ; i++)
	{
		if (p[i] == 'R')
		{
			std::swap(start, end);
			reverse = -reverse;
		}
		else if (p[i] == 'D')
		{
			if (start * reverse > end * reverse)
			{
				ans = "error";
				return (0);
			}
			start += reverse;
		}
	}
	return (1);
}

void make_ans()
{
	ans = "[";

	if (reverse == 1)
		for (int i = start ; i <= end ; i++)
		{
			ans += std::to_string(x[i]);
			if (i < end)
				ans += ",";
		}
	else
		for (int i = start ; i >= end ; i--)
		{
			ans += std::to_string(x[i]);
			if (i > end)
				ans += ",";
		}
	ans += "]";
}

void solve()
{
	std::cin >> p >> n >> arr;
	parsing();
	if (!operation())
		return;
	make_ans();
}

void print_val()
{
	std::cout << ans << endl;
}

int main()
{
	input();
	while (T--)
	{
		solve();
		print_val();
	}
	return (0);
}