💡Problem Solving/BOJ

[BOJ 5430] AC (Java)

gom20 2021. 11. 15. 11:17

문제

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

 

5430번: AC

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

www.acmicpc.net

 

풀이

Deque 문제로 R명령어가 들어왔을 때 값이 들어가는 입구를 바꿔주면 된다. (First, Last)

First를 입구로 사용한다면 나중에 값을 뽑을 땐 Last로 뽑아야 생각한 순서대로 값이 출력된다. (반대도 마찬가지)

이 부분이 처음에 헷갈려서 LinkedList 메소드를 테스트하면서 정리해보았다.

2021.11.15 - [Java] - [Java] Deque 자료 구조 (LinkedList 메소드)

 

[Java] Deque 자료 구조 (LinkedList 메소드)

Deque 구현체로 ArrayDeque와 LinkedList 를 주로 사용한다. LinkedList에 값을 넣고 뽑기 위한 많은 메소드를 있는데, 헷갈리는 점이 있어서 정리한다. Deque란? 덱(deque, "deck"과 발음이 같음 ← double-ende..

gom20.tistory.com

 

소스코드

package queue;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;

public class BOJ5430 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T = Integer.parseInt(br.readLine());
        for(int i = 0; i < T; i ++){
            String command = br.readLine();
            int N = Integer.parseInt(br.readLine());
            String[] arr = br.readLine().replaceAll("^\\[", "")
                    .replaceAll("\\]$", "")
                    .split(",");
            bw.write(solution(command, arr) + "\n");
        }
        bw.flush();
    }

    private static String solution(String command, String[] arr){
        LinkedList<String> deque = new LinkedList<String>();
        for(int i = 0; i < arr.length; i++){
            if(arr[i].equals("")) continue;
            deque.offerFirst(arr[i]);
        }

        boolean fifo = true; // offerFirst -> pollLast <-> offerLast -> pollFirst
        for(int i = 0; i < command.length(); i++){
            char c = command.charAt(i);
            if(c == 'R'){
                if(fifo) fifo = false;
                else fifo = true;
            } else {
                if(deque.isEmpty()) return "error";
                if(fifo){
                    deque.pollLast();
                } else {
                    deque.pollFirst();
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        while(!deque.isEmpty()){
            if(fifo) sb.append(deque.pollLast());
            else sb.append(deque.pollFirst());
            if(!deque.isEmpty()) sb.append(",");
        }
        sb.append("]");
        return sb.toString();
    }

}

'💡Problem Solving > BOJ' 카테고리의 다른 글

[BOJ 1992] 쿼드트리 (Java)  (0) 2021.11.17
[BOJ 2630] 색종이 만들기 (Java)  (0) 2021.11.16
[BOJ 1021] 회전하는 큐 (Java)  (0) 2021.11.14
[BOJ 18258] 큐 2 (Java)  (0) 2021.11.14
[BOJ 4949] 균형잡힌 세상 (Java)  (0) 2021.11.14