๐Ÿ™‡โ€โ™€๏ธ[Gold V] AC - 5430

๋ฌธ์ œ ๋งํฌ

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 3428 KB, ์‹œ๊ฐ„: 36 ms

๋ถ„๋ฅ˜

๋ฑ, ํŒŒ์‹ฑ, ๊ตฌํ˜„, ๋ฌธ์ž์—ด, ์ž๋ฃŒ ๊ตฌ์กฐ

์ œ์ถœ ์ผ์ž

2023๋…„ 12์›” 25์ผ 17:24:46

๋ฌธ์ œ ์„ค๋ช…

์„ ์˜์ด๋Š” ์ฃผ๋ง์— ํ•  ์ผ์ด ์—†์–ด์„œ ์ƒˆ๋กœ์šด ์–ธ์–ด AC๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. AC๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด ์–ธ์–ด์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜ R(๋’ค์ง‘๊ธฐ)๊ณผ D(๋ฒ„๋ฆฌ๊ธฐ)๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ R์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜์ด๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•จ์ˆ˜๋Š” ์กฐํ•ฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "AB"๋Š” A๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์— ๋ฐ”๋กœ ์ด์–ด์„œ B๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "RDD"๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋‹ค์Œ ์ฒ˜์Œ ๋‘ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. T๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. p์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค n โ‰ค 100,000)

๋‹ค์Œ ์ค„์—๋Š” [x1,...,xn]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค xi โ‰ค 100)

์ „์ฒด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง€๋Š” p์˜ ๊ธธ์ด์˜ ํ•ฉ๊ณผ n์˜ ํ•ฉ์€ 70๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿš€ํ’€์ด

R์˜ ๊ฒฝ์šฐ reverse ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

๋‚˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํˆฌํฌ์ธํŠธ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

R์„ ํ•  ๋•Œ๋งˆ๋‹ค bool rflag๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š”๋ฐ rflag๊ฐ€ ์ผœ์ ธ์žˆ์œผ๋ฉด ๋’ค์—์„œ๋ถ€ํ„ฐ ์ค„์–ด๋“œ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ฉด ์•ž์—์„œ ๋ถ€ํ„ฐ ์ฆ๊ฐ€ํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

if (str[i] == 'R')
{
	if (rflag == false)
		rflag = true;
	else
		rflag = false;
	//R(vec);
}

์‹ค์งˆ์ ์œผ๋กœ D์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ํฌ์ธํ„ฐ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

if (str[i] == 'D')
{
    if (rflag == false)
    {
        pos++;
        if (pos > rpos + 1)
        {
            errorFlag = true;
        }
    }
    else
    {
        rpos--;
        if (rpos + 1< pos)
        {
            errorFlag = true;
        }
    }
    //D(vec);
}

์ด๋ฌธ์ œ์—์„œ ์–ด๋ ค์šด ์ ์€ ๋นˆ ๋ฒกํ„ฐ์ธ ์ƒํƒœ์—์„œ R๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ด๋‹ค.

์ด๋ถ€๋ถ„์„ ์œ ์˜ํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผํ•œ๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ D๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ์—๋Ÿฌ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ํ”Œ๋ ˆ๊ทธ๋ฅผ ์„ธ์›Œ์„œ ํ’€์—ˆ๋‹ค.

ํŠนํžˆ ์กฐ๊ฑด๋ฌธ์ด ํ—ท๊ฐˆ๋ฆฌ๋Š”๋ฐ ๊ทธ๋ƒฅ if (pos > rpos)๋ฅผ ํ•˜๋ฉด ํ‹€๋ฆฐ๋‹ค.

์ด๊ฑด ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ๋กœ์ง์„ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ์ดํ•ด๊ฐ€ ๋น ๋ฅผ๋“ฏ

์ด๊ฒŒ ์ดํ•ด๊ฐ€ ๋œ๋‹ค๋ฉด ์ถœ๋ ฅํ•  ๋•Œ๋Š” if (pos > rpos)์ผ ๋–„ ๋ฐ”๋กœ ]์„ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ์ดํ•ด๊ฐ€ ๋ ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

int t, pos = 0, rpos = 0;
bool errorFlag = false;

void solve()
{
	cin >> t;

	while (t > 0)
	{
		string str;
		cin >> str;

		int vsize;
		cin >> vsize;

		string vstr;
		cin >> vstr;

		vector<int> vec(vsize);
		int vpos = 0, temp = 0;
		for (int i = 1; i < vstr.size(); ++i)
		{
			if (vec.size() == 0)
				break;

			if (vstr[i] == ',' || vstr[i] == ']')
			{
				vec[vpos] = temp;
				vpos++;
				temp = 0;
			}
			else
			{
				temp *= 10;
				temp += vstr[i] - '0';
			}
		}

		bool rflag = false;
		pos = 0, errorFlag = false, rpos = vec.size() - 1;
		for (int i = 0; i < str.size(); ++i)
		{
			if (str[i] == 'R')
			{
				if (rflag == false)
					rflag = true;
				else
					rflag = false;
				//R(vec);
			}
			if (str[i] == 'D')
			{
				if (rflag == false)
				{
					pos++;
					if (pos > rpos + 1)
					{
						errorFlag = true;
					}
				}
				else
				{
					rpos--;
					if (rpos + 1< pos)
					{
						errorFlag = true;
					}
				}
				//D(vec);
			}

			if (errorFlag == true)
			{
				cout << "error" << '\n';
				break;
			}
		}

		if (errorFlag == true)
		{
			t--;
			continue;
		}

		cout << "[";

		if (vec.size() == 0 || pos > rpos)
		{
			cout << "]" << '\n';
		}
		else if (rflag == false)
		{
			for (int i = pos; i < rpos; ++i)
			{
				cout << vec[i] << ",";
			}

			cout << vec[rpos] << "]" << '\n';
		}
		else if (rflag == true)
		{
			for (int i = rpos; i > pos; --i)
			{
				cout << vec[i] << ",";
			}

			cout << vec[pos] << "]" << '\n';
		}

		t--;
	}
}

image

ํ•œ์ฐธ ํ—ค๋งธ์ง€๋งŒ ๊ฒฐ๊ตญ์—” ์Šค์Šค๋กœ์˜ ํž˜์œผ๋กœ ํ’€์—ˆ๋‹ค๊ตฌ~!

๐Ÿš€์ „์ฒด ์ฝ”๋“œ

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

// R์€ ๋’ค์ง‘๊ธฐ
// D๋Š” ๋งจ ์œ„ ๋ฒ„๋ฆฌ๊ธฐ

int t, pos = 0, rpos = 0;
bool errorFlag = false;

void solve()
{
	cin >> t;

	while (t > 0)
	{
		string str;
		cin >> str;

		int vsize;
		cin >> vsize;

		string vstr;
		cin >> vstr;

		vector<int> vec(vsize);
		int vpos = 0, temp = 0;
		for (int i = 1; i < vstr.size(); ++i)
		{
			if (vec.size() == 0)
				break;

			if (vstr[i] == ',' || vstr[i] == ']')
			{
				vec[vpos] = temp;
				vpos++;
				temp = 0;
			}
			else
			{
				temp *= 10;
				temp += vstr[i] - '0';
			}
		}

		bool rflag = false;
		pos = 0, errorFlag = false, rpos = vec.size() - 1;
		for (int i = 0; i < str.size(); ++i)
		{
			if (str[i] == 'R')
			{
				if (rflag == false)
					rflag = true;
				else
					rflag = false;
				//R(vec);
			}
			if (str[i] == 'D')
			{
				if (rflag == false)
				{
					pos++;
					if (pos > rpos + 1)
					{
						errorFlag = true;
					}
				}
				else
				{
					rpos--;
					if (rpos + 1< pos)
					{
						errorFlag = true;
					}
				}
				//D(vec);
			}

			if (errorFlag == true)
			{
				cout << "error" << '\n';
				break;
			}
		}

		if (errorFlag == true)
		{
			t--;
			continue;
		}

		cout << "[";

		if (vec.size() == 0 || pos > rpos)
		{
			cout << "]" << '\n';
		}
		else if (rflag == false)
		{
			for (int i = pos; i < rpos; ++i)
			{
				cout << vec[i] << ",";
			}

			cout << vec[rpos] << "]" << '\n';
		}
		else if (rflag == true)
		{
			for (int i = rpos; i > pos; --i)
			{
				cout << vec[i] << ",";
			}

			cout << vec[pos] << "]" << '\n';
		}

		t--;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: