본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩 테스트/백준 알고리즘] 5430번 - AC (Java, 자바 풀이)

by 코코의 주인 2022. 12. 16.

문제

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

 

5430번: AC

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

www.acmicpc.net


문제 설명


문제 풀이

덱(Deque) 자료구조를 사용해서 해결했다. 

처음에 자료구조를 스택으로 하고 R과 D에 대응하는 메서드를 직접 작성했는데 시간초과가 발생했다.


코드

package BEAKJOON.Java.Gold;

import java.util.*;
import java.io.*;
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());
        while (T-- > 0) {
            StringBuilder sb = new StringBuilder();
            char[] op = br.readLine().toCharArray();
            int n = Integer.parseInt(br.readLine());
            Deque<String> dq = new LinkedList<>();
            String str1 = br.readLine();
            str1 = str1.replace("[", "");
            str1 = str1.replace("]", "");
            String[] sArr = str1.split(",");
            boolean flag = true;
            boolean result = false;
            for (String str : sArr) {
                dq.add(str);
            }
            for (char c : op) {
                if (c == 'R') {
                    flag = !flag;
                } else {
                    if (n - 1 >= 0) {
                        if (flag) {
                            dq.removeFirst();
                            n--;
                        } else {
                            dq.removeLast();
                            n--;
                        }
                    } else {
                        bw.write("error\n");
                        result = true;
                        break;
                    }
                }
            }
            if (!result) {
                if (dq.size() == 0) {
                    bw.write("[]\n");
                } else {
                    sb.append("[");
                    if (flag) {
                        for (int i = 0; i < n - 1; i++) {
                            sb.append(dq.pollFirst() + ",");
                        }
                        sb.append(dq.pollFirst() + "]\n");
                    } else {
                        for (int i = 0; i < n - 1; i++) {
                            sb.append(dq.pollLast() + ",");
                        }
                        sb.append(dq.pollLast() + "]\n");
                    }
                }
                bw.write(sb.toString());
            }
        }
        bw.close();
    }
}

댓글