백준 5430번 Deque 자료 구조 이해하기

byeol·2023년 2월 20일
0

처음에 ArrayList로 만들어서 구현했는데 생각해보니 ArrayList는 검색은 용이하나 삭제나 삽입의 경우 비효율적이기 때문에
Deque를 이용하기로 한다.

또한 이 문제는 Deque를 이용해서 푸는게 바람직하다.

import java.util.*;
import java.io.*;


public class Main {

    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        ArrayDeque<Integer> deque;
        StringTokenizer st;

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

        while (T-- > 0) {
            deque = new ArrayDeque<Integer>();

            String function = br.readLine();
            int k = Integer.parseInt(br.readLine());

            st = new StringTokenizer(br.readLine(), "[],");
            for (int i = 0; i < k; i++) {
                int x =Integer.parseInt(st.nextToken());
                deque.offer(x);
            }

            AC(deque, function);


        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();


    }

    static void AC(ArrayDeque<Integer> deque, String function) {
        char[] func_arr = function.toCharArray();

        boolean rf = false;//false가 원래
        for (char f : func_arr) {


            if (f == 'R') {
                if (rf == true) {
                    rf = false;
                } else {
                    rf = true;
                }
                continue;
            }

            if (rf == true) {
                if (deque.pollLast() == null) {
                    sb.append("error\n");
                    return;
                }
            } else {
                if (deque.pollFirst() == null) {
                    sb.append("error\n");
                    return;
                }
            }

        }
        makeresult(deque, rf);


    }

    static void makeresult(ArrayDeque<Integer> deque, boolean rf) {
        int size = deque.size();
        sb.append("[");
        if (deque.size() > 0) {
            if (rf == true) {
                int first = deque.pollLast();
                sb.append(first);
                for (int i = size - 1; i >= 1; i--) {
                    sb.append("," + deque.pollLast());
                }
            } else {
                int first = deque.pollFirst();
                sb.append(first);
                for (int i = 1; i < size; i++) {
                    sb.append("," + deque.pollFirst());
                }

            }


        }
        sb.append("]").append("\n");


    }


}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글