Giken Dev
반응형

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

 

5430번: AC

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

www.acmicpc.net

 

실제로 배열을 뒤집어가면서 하면, 시간초과가 났을 것입니다.

따라서 deque를 통해 앞 뒤의 삭제를 해줍니다.

뒤집어진 상태는 reverse 라는 boolean 변수를 통해서 컨트롤합니다.

 

 

또한 이 문제에서는 stringbuilder를 써야만 시간초과를 해결할 수 있었습니다 !!

 

package WEEK0.P5430;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    static int N;
    static ArrayList<Integer> arr;
    static ArrayDeque<Integer> deque;

    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/WEEK0/P5430/input.txt"));

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        int TC = Integer.parseInt(st.nextToken());

        for (int tc = 0; tc < TC; tc++) {
            String op = br.readLine();
            N = Integer.parseInt(br.readLine());

            String input = br.readLine();
            input = input.replace("[", "");
            input = input.replace("]", "");
            String[] input_ = input.split(",");
            //arr = new ArrayList<>();
            deque = new ArrayDeque<>();

            for (int i = 0; i < N; i++) {
                deque.add(Integer.parseInt(input_[i]));
            }

            // 연산 시작
            boolean reverse = false;
            int flag = 0; // error 일 때 종료조건

            for (int i = 0; i < op.length(); i++) {
                if (op.charAt(i) == 'R') {
                    // 실제로 뒤집는게 아니라, 방향 변수 reverse 만 역전시켜주기
                    reverse = (reverse == true) ? false : true;
                } else if (op.charAt(i) == 'D') {
                    // 원소가 하나도 없으면 에러 출력
                    if (deque.size() == 0) {
                        flag = 1;
                        break;
                    }

                    // 원소가 하나라도 있으면 삭제
                    if (reverse) {
                        deque.removeLast();
                    } else {
                        deque.removeFirst();
                    }
                }
            }

            if(flag == 1){
                sb.append("error" + "\n");
                continue;
            }

            // 원소의 개수가 0 일때도 출력 돼야해 빈 괄호로!
            sb.append("[");
            if (reverse) {
                while (!deque.isEmpty()) {
                    if (deque.size() == 1) {
                        sb.append(deque.pollLast());
                    } else {
                        sb.append(deque.pollLast() + ",");
                    }

                }
            } else {
                while (!deque.isEmpty()) {
                    if (deque.size() == 1) {
                        sb.append(deque.pollFirst());
                    } else {
                        sb.append(deque.pollFirst() + ",");
                    }
                }
            }
            sb.append("]" + "\n");
        }

        System.out.println(sb);
    }
}
반응형
profile

Giken Dev

@기켄

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!