๋šœ๋ถ€๋‹ˆ์˜ Devlog

[BOJ] 5430.AC (Java)

by ๋šœ๋ถ€๋‹ˆ

 

 

5430๋ฒˆ: AC

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

์ด ๋ฌธ์ œ์—์„œ๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค T, ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p, ๋ฐฐ์—ด ๊ธธ์ด n, ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฐฐ์—ด์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

p๋Š” 'RDD'์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ R์€ ๋ฐฐ์—ด ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ error๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

๋ชจ๋“  R์— ๋Œ€ํ•ด์„œ ๋ฐฐ์—ด์„ ๋’ค์ง‘์–ด๊ฐ€๋ฉฐ ์ˆ˜ํ–‰์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด, R์˜ ์ƒํƒœ์— ๋”ฐ๋ผ D์˜ ์ˆ˜ํ–‰ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

deque์„ ๋งŒ๋“ค์–ด ์ˆซ์ž๋ฅผ ์ €์žฅํ•œ ํ›„, R์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค D์˜ ์ˆ˜ํ–‰์œ„์น˜๋ฅผ ๋งจ ์•ž, ๋งจ ๋’ค๋กœ ๋ฐ”๊พธ๋Š” ํ˜•ํƒœ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

import java.io.*;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

class Main {

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

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

        StringTokenizer st;
        ArrayDeque<Integer> deque;

        int T = Integer.parseInt(br.readLine()); // ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜

        while(T-- > 0) {
            String p = br.readLine(); // ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜
            int n = Integer.parseInt(br.readLine()); // ๋ฐฐ์—ด์˜ ๊ธธ์ด
            st = new StringTokenizer(br.readLine(), "[],"); // ํŠน์ • ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด st์— ์ €์žฅ

            deque = new ArrayDeque<Integer>(); // ๋ฑ ์ดˆ๊ธฐํ™”
            for (int i = 0; i < n; i++) { // ๋ฑ ์ƒ์„ฑ
                deque.add(Integer.parseInt(st.nextToken()));
            }

            AC(p, deque);

        }

        bw.flush();
        bw.close();
        br.close();

    }

    public static void AC(String command, ArrayDeque<Integer> deque) throws IOException {
        boolean isReverse = false; // ์ˆœ์„œ ๋ณ€๊ฒฝ ์—ฌ๋ถ€ (default : ์ˆœ์„œ ๋ณ€๊ฒฝ X์˜ ์˜๋ฏธ๋กœ false)
        for(char cmd : command.toCharArray()) {
            if (cmd == 'R') {
                isReverse = !isReverse; // ์ˆœ์„œ ๋’ค์ง‘๊ธฐ
                continue;
            }

            if (cmd == 'D') {
                if (deque.isEmpty()) { // ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ ์ˆ˜ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ error ๋ฐ˜ํ™˜
                    bw.write("error\n");
                    return;
                }
                if (isReverse) { // ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
                    deque.pollLast();
                } else { // ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
                    deque.pollFirst();
                }
            }
        }

        // ๋ชจ๋“  ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋ฌธ์„ ๋งŒ๋“ค์–ด์•ผ ํ•จ

        makePrint(deque, isReverse);

    }

    public static void makePrint(ArrayDeque<Integer> deque,  boolean isReverse) throws IOException {

        bw.write("[");

        if (!deque.isEmpty()) { // deque์— ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ

            if (isReverse) { // ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์€ ๊ฒฝ์šฐ
                bw.write(String.valueOf(deque.pollLast()));
                while (!deque.isEmpty()){
                    bw.write("," + String.valueOf(deque.pollLast()));
                }
            }
            else { // ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์ง€ ์•Š์€ ๊ฒฝ์šฐ
                bw.write(String.valueOf(deque.pollFirst()));
                while(!deque.isEmpty()) {
                    bw.write("," + String.valueOf(deque.pollFirst()));
                }
            }

        }

        bw.write("]\n");
    }
}

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ