문자열 파싱:
연산 수행을 위한 변수 초기화:
주어진 연산 수행:
결과 출력:
using System.Text;
namespace BOJ
{
class No_5430
{
static void Main()
{
StringBuilder sb = new StringBuilder();
int testCase = InputToInt();
while (testCase-- > 0)
{
bool reverse = false;
bool flag = true;
string s = Input();
int n = InputToInt();
string temp = Input();
temp = temp.Substring(1, temp.Length - 2);
var list = n == 0 ? new List<int>() : Array.ConvertAll(temp.Split(','), int.Parse).ToList();
int dequeCount = 0;
int start = 0;
int end = list.Count - 1;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == 'R')
{
reverse = !reverse;
}
else
{
dequeCount++;
if (dequeCount > list.Count)
{
flag = false;
break;
}
if (reverse == true)
{
end--;
}
else
{
start++;
}
}
}
if (flag == true)
{
sb.Append('[');
if (reverse == true)
{
for (int i = end; i >= start; i--)
{
if (i == start)
{
sb.Append($"{list[i]}");
}
else
{
sb.Append($"{list[i]},");
}
}
}
else
{
for (int i = start; i <= end; i++)
{
if (i == end)
{
sb.Append($"{list[i]}");
}
else
{
sb.Append($"{list[i]},");
}
}
}
sb.Append(']');
sb.AppendLine();
}
else
{
sb.AppendLine("error");
}
}
Console.Write(sb);
}
static int InputToInt() => int.Parse(Console.ReadLine());
static string Input() => Console.ReadLine();
}
}
처음에는 Reverse와 Remove를 모두 List의 내장함수를 사용하였다. => 시간초과
Reverse를 flag(bool)
로 판단하여 앞에서 출력 혹은 뒤에서 출력으로 수정하였다 => 대략 2000ms
Remove를 index(int)
로 판단하여 출력 시작과 끝을 결정하도록 수정하였다. => 대략 244ms
구현
자료 구조
문자열
파싱
덱