[BaekJoon] 5430 AC (Java)

SeongWon Ohยท2021๋…„ 12์›” 29์ผ
0
post-thumbnail

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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


๐Ÿ“ ๋ฌธ์ œํ’€์ด ๋ฐฉ๋ฒ•

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜, ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜, ์ˆ˜์˜ ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฌธ์ž์—ด์—์„œ ๋ฆฌ์ŠคํŠธ๋กœ ํŒŒ์‹ฑ

์ˆ˜์˜ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹Œ [1,2,3,4]์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ ธ์„œ ํŒŒ์‹ฑํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋‚ด๋ถ€์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉ์ž์˜ ๋ฌธ์ œํ’€์ด ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„์ฃผ๋Š” ์ž‘์—…์„ ํ•˜์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๋’ค์ง‘๋Š” ๋ช…๋ น์„ Collections์˜ reverse()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํŒŒ์‹ฑ ๋ถ€๋ถ„์˜ ์ž‘์„ฑ ์ฝ”๋“œ๋Š” parseArr()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋ช…๋ น ํ•จ์ˆ˜ ์ˆ˜ํ–‰

ํŒŒ์‹ฑ์„ ํ•œ ํ›„์—๋Š” R๊ณผ D๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜์˜ ๋ช…๋ น์— ๋”ฐ๋ฅธ ์ˆ˜ํ–‰ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์— ๋”ฐ๋ผ ๊ฐ๊ฐ list๋ฅผ ๋’ค์ง‘๊ฑฐ๋‚˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ’์˜ ์‚ญ์ œ์‹œ ๊ฐ’์˜ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋Š” try/catch๋ฌธ์œผ๋กœ IndexOutOfBoundsException์„ ์žก์„ ์‹œ error๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ช…๋ น ์ˆ˜ํ–‰์„ ํ•  ๋•Œ R ๋ช…๋ น์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค Collections.reverse()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋’ค์ง‘๊ฒŒ ๋œ๋‹ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋˜์–ด์„œ ์ฝ”๋“œ ์ œ์ถœ ์‹œ ์‹คํ–‰์ดˆ๊ณผ๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ถ€๋ถ„์€ isReverse๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์—ฌ Collections.reverse()๋Š” ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜์˜€๋”๋‹ˆ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๋ช…๋ น ์ˆ˜ํ–‰ ์ฝ”๋“œ๋Š” executeFunction()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ฆฌ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

๋ช…๋ น ์ˆ˜ํ–‰์„ ๋งˆ์นœ ํ›„์—๋Š” ๋‚จ์€ ๋ฐฐ์—ด์„ ์˜ณ๋ฐ”๋ฅธ ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜์—ฌ Stringํƒ€์ž…์œผ๋กœ returnํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ String์œผ๋กœ ํŒŒ์‹ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” makeResultString()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ž‘์„ฑํ•œ ์ฝ”๋“œ

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

public class Main {
    public static void main(String[] args) throws IOException {
        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 inputArr = br.readLine();

            bw.append(executeFunction(command, n, parseArr(inputArr)));
        }

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

    public static List<Integer> parseArr(String inputArr) {
        List<Integer> numList = new ArrayList<>();
        Arrays.stream(inputArr.substring(1, inputArr.length() - 1).split(","))
                .forEach(s -> {
                    if (!s.equals("")) numList.add(Integer.parseInt(s));
                });
        return numList;
    }

    public static String executeFunction(String command, int n, List<Integer> numList) {
        boolean isReverse = false;
        for (int i = 0; i < command.length(); i++) {
            if (command.charAt(i) == 'R') {
                isReverse = !isReverse;
            }

            if (command.charAt(i) == 'D') {
                try {
                    if (isReverse)
                        numList.remove(numList.size() - 1);
                    else
                        numList.remove(0);
                } catch (IndexOutOfBoundsException e) {
                    return "error\n";
                }
            }
        }

        if (isReverse) {
            Collections.reverse(numList);
        }

        return makeResultString(numList);
    }

    public static String makeResultString(List<Integer> numList) {
        if (numList.isEmpty()) {
            return "[]\n";
        }

        StringBuilder sb = new StringBuilder();
        sb.append("[");
        numList.stream()
                .forEach(integer -> {
                    sb.append(integer);
                    sb.append(",");
                });
        sb.deleteCharAt(sb.length() - 1);
        sb.append("]\n");
        return sb.toString();
    }
}

profile
๋ธ”๋กœ๊ทธ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. -> https://seongwon.dev/

0๊ฐœ์˜ ๋Œ“๊ธ€