[백준 / 골드5] 5430 AC (Java)

wannabeking·2022년 9월 18일
0

코딩테스트

목록 보기
99/155

문제 보기



사용한 것

  • 문자열에서 원하는 문자만 추출하기 위한 문자열 파싱
  • 앞, 뒤에서 모두 원소를 꺼내기 위한 Deque


풀이 방법

  • 명령들의 집합인 문자열 p가 주어지는데 'R'은 뒤집기, 'D'는 삭제이다.
  • 따라서 Deque을 사용한다. !reverse 상태에서 삭제하려면 removeFirst(), reverse 상태에서 삭제하려면 removeLast()를 실행하면 되기 때문이다
  • 만약 더이상 원소가 없는데 'D' 명령어가 들어오면 "error"를 출력한다.
  • 명령을 모두 마친 상태에서 다시 배열 형태로 반환할 때에도 마찬가지이다.
  • 마지막으로 !reverse 상태면 removeFirst(), reverse 상태면 removeLast()를 실행하면서 원소들을 꺼내어 배열 형태로 변환하여 출력하면 된다.


코드

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for (int i = 0; i < t; i++) {
            String p = br.readLine();
            int n = Integer.parseInt(br.readLine());
            String line = br.readLine();
            line = line.substring(1, line.length() - 1);
            StringTokenizer st = new StringTokenizer(line, ",");
            Deque<Integer> deque = new ArrayDeque<>();
            while (st.hasMoreTokens()) {
                deque.addLast(Integer.parseInt(st.nextToken()));
            }
            boolean reverse = false;
            boolean error = false;
            for (int j = 0; j < p.length(); j++) {
                if (p.charAt(j) == 'R') {
                    reverse = !reverse;
                } else {
                    if (deque.size() == 0) {
                        error = true;
                        break;
                    }
                    if (!reverse) {
                        deque.removeFirst();
                    } else {
                        deque.removeLast();
                    }
                }
            }
            if (error) {
                System.out.println("error");
                continue;
            }
            StringBuilder output = new StringBuilder("[");
            if (!reverse) {
                while (!deque.isEmpty()) {
                    output.append(deque.removeFirst());
                    if(!deque.isEmpty()) {
                        output.append(",");
                    }
                }
            } else {
                while (!deque.isEmpty()) {
                    output.append(deque.removeLast());
                    if(!deque.isEmpty()) {
                        output.append(",");
                    }
                }
            }
            output.append("]");
            System.out.println(output);
        }
    }
}


profile
내일은 개발왕 😎

0개의 댓글