본문 바로가기
Problem Solving/Baekjoon

[백준] 5430 AC - Data Structure / Java

by graycode 2022. 11. 5.

 문제 링크

 

5430번: AC

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

www.acmicpc.net

 

 풀이 과정

입력받은 테스트 케이스 수 t 만큼 함수 p 와 배열의 크기 n 을 입력받고

해당 배열의 정수를 StringTokenizer 구분자를 "[]," 로 지정하여 입력받아 Deque 에 offer 한다.

 

함수 R 을 수행 할 시, boolean 변수 reverse 의 논리값을 변환하며,

reverse = true 일 경우 덱에서 removeLast 를 통해 덱의 뒤에서부터 원소를 추출하며

그렇지 않을 경우 removeFirst 로 덱의 앞에서 부터 원소를 추출한다.

 

만약 추출 시 덱에 원소가 남아있지 않을 경우 "error" 를 반환한다.

 

출력 문자열을 반환하기 위하여 StringBuilder 를 활용할 시에도

위와 같이 reverse 변수값에 따라 덱에서 값을 추출하여 append 하여 각 테스트 케이스의 정답으로써 반환한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int t = Integer.parseInt(br.readLine());

        Deque<Integer> dq = new LinkedList<>();
        while (t-- > 0) {
            String p = br.readLine();
            int n = Integer.parseInt(br.readLine());

            dq.clear();
            st = new StringTokenizer(br.readLine(), "[],");
            for (int i = 0; i < n; i++)
                dq.offer(Integer.parseInt(st.nextToken()));

            bw.write(ac(dq, p));
        }

        bw.flush();
    }

    private static String ac(Deque<Integer> dq, String p) {
        boolean reverse = false;

        for (char comm : p.toCharArray()) {
            if (comm == 'R')
                reverse = !reverse;
            else {
                if (dq.isEmpty())
                    return "error\n";

                if (reverse)
                    dq.removeLast();
                else
                    dq.removeFirst();
            }
        }

        StringBuilder sb = new StringBuilder("[");
        while (!dq.isEmpty()) {
            sb.append(reverse ? dq.removeLast() : dq.removeFirst());
            if (!dq.isEmpty())
                sb.append(',');
        }
        sb.append("]\n");

        return sb.toString();
    }

}

댓글