쫑쫑이의 블로그

백준 5430 AC Java [구현, 파싱] 본문

알고리즘/백준

백준 5430 AC Java [구현, 파싱]

쫑쫑2 2022. 12. 1. 01:48

https://www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

문제는 어렵지 않은데 입력값을 받는 것과 출력값 만드는 과정에서 많이 힘들었다

1. 입력값을 받을 때 [], 를 처리

2. 출력값을 만들 때 int[]를 reverse 처리

 

R이 나오면 boolean 값으로 reverse할지 안할지 처리하는 flat으로 사용하고

D가 나오면 left가 right보다 크면 Error처리하고 break한다

크지 않으면 flat에 따라 left 값을 늘리거나, right 값을 줄였다

 

package gold;

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine());
        for (int t = 0; t < T; t++) {
            String[] func = br.readLine().split("");
            int N = Integer.parseInt(br.readLine());
            String str = br.readLine();
            int[] arr = N != 0 ? Arrays.stream(str.substring(1, str.length() - 1).split(",")).mapToInt(Integer::parseInt).toArray() : new int[]{};
            int left = 0, right = N - 1;
            boolean isReversed = false;
            boolean isBreak = false;
            for (int f = 0; f < func.length; f++) {
                if (func[f].equals("R")) isReversed = !isReversed;
                else {
                    if (left > right) {
                        isBreak = true;
                        break;
                    }
                    if (isReversed) right--;
                    else left++;
                }
            }
            if (isBreak) sb.append("error");
            else {
                int[] ar = Arrays.copyOfRange(arr, left, right + 1);
                List<Integer> list = Arrays.stream(ar).boxed().collect(Collectors.toList());
                if (isReversed) Collections.reverse(list);
                sb.append(Arrays.toString(list.toArray()).replace(" ", ""));
            }
            sb.append("\n");
        }
        System.out.println(sb);

    }
}

입력값을 받을 때 new StringTokenizer(br.readLine(), "[],"); 으로 숫자만 처리해줄 수 있다

생각보다 속도가 느리게 나왔는데 덱을 사용하는게 좋아보인다

 

추가 엣지 테스트케이스

3
DD
2
[1,2]
R
0
[]
D
0
[]

 

결과값

[]

[]

Error