[BOJ] 5430 AC - JAVA

ONE·2022년 4월 7일
0

Baekjoon Online Judge

목록 보기
11/16

📚 Problem

5430 AC

📝 Solution

Key Idea

  • 문자열에서 숫자만 분리하여 ArrayList 에 담는다
  • R 연산을 할때에는 실제로 배열을 reverse 하는 것이 아닌 정방향과 역방향으로 boolean 값으로 구분한다
  • 배열의 size 가 0 일 때 D 연산을 수행한다면 error 반환
  • 배열의 size 가 1 이상 일 떄 정방향 역방향에 따라 배열을 제거하는 인덱스를 0 또는 length - 1 로 한다
private static String execute(String functions, ArrayList<Integer> list) {
    boolean check = true; // true : 정방향 , false : 역방향

    for (int i = 0; i < functions.length(); i++) {
        char function = functions.charAt(i);

        if (function == 'R')
            check = !check;

        else {
            if (list.size() == 0)
                return "error";
            if (check)
                list.remove(0);
            else
                list.remove(list.size() - 1);
        }
    }

    return makeArray(list, check);
}

💻 Code

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();

        for (int i = 0; i < T; i++) {
            String functions = scanner.next();
            int n = scanner.nextInt();
            String array = scanner.next();

            ArrayList<Integer> list = numArray(array);
            System.out.println(execute(functions, list));
        }

        scanner.close();
    }

    private static ArrayList<Integer> numArray(String ary) {
        ArrayList<Integer> num = new ArrayList<>();
        String[] tokens = ary.substring(1, ary.length() - 1).split(",");

        if(tokens[0].equals(""))
            return num;

        for(String token : tokens)
            num.add(Integer.parseInt(token));

        return num;
    }

    private static String execute(String functions, ArrayList<Integer> list) {
        boolean check = true; // true : 정방향 , false : 역방향

        for (int i = 0; i < functions.length(); i++) {
            char function = functions.charAt(i);

            if (function == 'R')
                check = !check;

            else {
                if (list.size() == 0)
                    return "error";
                if (check)
                    list.remove(0);
                else
                    list.remove(list.size() - 1);
            }
        }

        return makeArray(list, check);
    }

    private static String makeArray(ArrayList<Integer> list, boolean check) {
        StringBuilder builder = new StringBuilder();

        builder.append("[");

        if (check) {
            for (int i = 0; i < list.size(); i++) {
                if (i == 0)
                    builder.append(list.get(i));
                else
                    builder.append(",").append(list.get(i));
            }
        }

        else {
            for (int i = list.size() - 1; i >= 0; i--) {
                if (i == list.size() - 1)
                    builder.append(list.get(i));
                else
                    builder.append(",").append(list.get(i));
            }
        }

        builder.append("]");

        return builder.toString();
    }
}
profile
New, Strange, Want to try

0개의 댓글