본문 바로가기

Algorithm/문제

[백준 / C#, JAVA] 5430. AC (G5)

 

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);
	}
}