[백준] 5430. AC

1 분 소요

문제 링크

[백준] 5430. AC


풀이 과정

Reverse(R) 와 Delete(D) 명령을 자유롭게 하기 위해 Deque을 생각했습니다.

R 명령이 있을 때마다 boolean 값으로 체크를 해두어, D 명령을 만났을 때 removeFirst를 할 지, removeLast를 할 지 판단했습니다.

또한, 답으로 출력할 배열을 만들기 위해 Iterator 객체를 사용했으며, 역방향의 순회를 위하여 Deque 클래스의 descendingIterator 메소드를 사용했습니다.


코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int TC = sc.nextInt();
        for (int tc = 1; tc <= TC; tc++) {
            String ans = "";

            String p = sc.next();
            int n = sc.nextInt();
            String arr = sc.next();

            Deque<Integer> deque = new ArrayDeque<>();
            if (!arr.equals("[]")) {
                arr = arr.substring(1, arr.length() - 1);
                String[] splitArr = arr.split(",");
                if (splitArr.length != 0) {
                    for (String s : splitArr) {
                        deque.addLast(Integer.parseInt(s));
                    }
                }
            }

            boolean front = true;
            boolean wrong = false;
            int idx = 0;

            while (idx < p.length()) {
                if (p.charAt(idx) == 'R') {
                    front = !front;
                } else if (p.charAt(idx) == 'D') {
                    if (deque.isEmpty()) {
                        wrong = true;
                        break;
                    } else {
                        if (front) {
                            deque.removeFirst();
                        } else {
                            deque.removeLast();
                        }
                    }
                }

                idx++;
            }

            if (!deque.isEmpty()) {
                StringBuilder sb = new StringBuilder("[");

                Iterator<Integer> iter = front ? deque.iterator() : deque.descendingIterator();

                while (iter.hasNext()) {
                    sb.append(iter.next() + ",");
                }
                ans = sb.substring(0, sb.length() - 1) + "]";
            } else {
                ans = "[]";
            }

            if (wrong)
                ans = "error";

            System.out.println(ans);
        }
    }
}

카테고리:

업데이트:

댓글남기기