5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
문제 설명을 보고 Reverse쓰면 쉬운거 아님? 하고 시작하면 나처럼 된다. 자료구조를 실제로 뒤집지 말고 뒤집어서 작업한 것처럼 보이게 만들자. Reverse를 다 지워도 시간 초과가 된다면 출력을 StringBuilder로 이어 붙혀서 한번에 출력하자. 그래도 시간 초과가 된다면 자료구조를 List로 바꿔서 실행해보자. 이걸 다 어떻게 알았냐면 나도 알고 싶지 않았다...
팁) 제출한 코드를 복사할 때 아래에서부터 긁으면 줄 번호가 복사되지 않는다.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace ConsolApplicaton3
{
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
List<int> arr=new List<int>();
String order;
String strArr;
int t = int.Parse(Console.ReadLine());
int length;
for (int i = 0; i < t; i++)
{
arr.Clear();
order = Console.ReadLine();
length = int.Parse(Console.ReadLine());
strArr = Console.ReadLine();
if (length == 0)
{
sb.Append(solution(order, arr, length)+"\n");
continue;
}
strArr = strArr.Substring(1, strArr.Length - 2);
string[] tmp = strArr.Split(',');
foreach (string s in tmp)
{
//Console.WriteLine(s);
arr.Add(int.Parse(s));
}
sb.Append(solution(order,arr,length)+"\n");
}
Console.WriteLine(sb);
}
static string solution(string order, List<int> arr, int length)
{
StringBuilder sb = new StringBuilder();
bool reverse = false;
if (length == 0)
{
if (order.Contains("D"))
{
return "error";
}
else
{
return "[]";
}
}
foreach (char c in order)
{
if (c.Equals('R'))
reverse = !reverse;
try
{
if (c.Equals('D'))
if (reverse)
arr.RemoveAt(arr.Count - 1);
else
arr.RemoveAt(0);
}
catch (Exception) { return "error";
}
}
sb.Append("[");
if (reverse)
{
for(int i=arr.Count-1;i>=0;i--)
sb.Append(arr[i] + ",");
}
else
{
foreach (Object a in arr)
{
sb.Append(a + ",");
}
}
if(sb.Length>1)
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
return sb.ToString();
}
}
}
2023. 07. 25 JAVA 풀이 추가
import java.util.*;
class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
Queue<Character> q = new LinkedList<Character>(); //
List<String> inputList = new ArrayList<String>();
int t = sc.nextInt();
for (int i = 0; i < t; i++) {
boolean reverse = false;
boolean error = false;
q.clear();
inputList.clear();
for (char c : sc.next().toCharArray()) {
q.add(c);
}
int length = sc.nextInt();
String input = sc.next();
if (length != 0) {
String[] inputArr = input.substring(1, input.length() - 1).split(",");
for (int j = 0; j < inputArr.length; j++) {
inputList.add(inputArr[j]);
}
}
while (q.size() != 0 && !error) {
switch (q.poll()) {
case 'R':
reverse = !reverse;
break;
case 'D':
if (inputList.size() == 0) {
sb.append("error\n");
error = true;
break;
}
if (reverse) {
inputList.remove(inputList.size() - 1);
break;
} else {
inputList.remove(0);
break;
}
default:
break;
}
}
int cursor = 0;
if (!error && !reverse) {
sb.append("[");
for (String s : inputList) {
sb.append(s);
if (++cursor < inputList.size()) {
sb.append(",");
}
}
sb.append("]\n");
} else if (!error && reverse) {
Collections.reverse(inputList);
sb.append("[");
for (String s : inputList) {
sb.append(s);
if (++cursor < inputList.size()) {
sb.append(",");
}
}
sb.append("]\n");
}
}
System.out.println(sb);
}
}
'Algorithm > 문제' 카테고리의 다른 글
[백준 / JAVA] 16935. 배열 돌리기 3 (G5) (0) | 2023.08.26 |
---|---|
[백준 / JAVA] 16927. 배열 돌리기 2 (G5) (0) | 2023.08.26 |
[백준 / JAVA] 1107. 리모컨 (G5) (0) | 2023.08.16 |
[백준 / C#] 10868. 최솟값 (G1) (0) | 2022.08.11 |
[백준 / C#] 1011. Fly me to the Alpha Centauri (G5) (0) | 2022.08.11 |