CodingTEST

[백준 5430] AC (JAVA)

경걍 2024. 1. 6. 05:42
반응형

백준 5430번 문제 - AC 

 

5430번: AC

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

www.acmicpc.net


문제 분석 

 

 

  • 숫자배열을 새로운 언어 AC로 처리했을 때, 결과 배열를 출력해라.
  • AC 규칙
    • R : 배열에 있는 수의 순서를 뒤집는 함수
    • D : 첫 번째 수를 버리는 함수 (배열이 비어있는데 D를 사용한 경우에는 에러가 발생)

해결 포인트

 

  • Deque 이용
    • 뒤 출력 앞 출력 둘 다 가능하기 때문 (R 사용 편리)
  • R 사용 시, 뒤에서부터 출력할지 앞에서부터 출력할지 여부를 체크하는 변수 구현
    •  boolean popFirst  : 앞에서부터 출력하면 true, 뒤에서부터 출력하면 false
  • D 사용 시, popFirst 확인해서 true면 pollFirst(), false면 pollLast() 실행
  • Error 체크하는 변수 구현 ( boolean isError  )

 

코드

 

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 t = 0; t < T; t++) {
            String command = br.readLine();
            int N = Integer.parseInt(br.readLine());

            String s = br.readLine();
            Deque<Integer> nums = new LinkedList<>();

            if(s.length() > 2) {
                s = s.substring(1, s.length() - 1);
                String[] split = s.split(",");

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

            boolean popFirst = true;
            boolean isError = false;

            for (int i = 0; i < command.length(); i++) {
                char value = command.charAt(i);

                if (value == 'R') {
                    popFirst = !popFirst;
                } else if (value == 'D') {
                    if (nums.isEmpty()) {
                        isError = true;
                        break;
                    }
                    if (popFirst) {
                        nums.pollFirst();
                    } else {
                        nums.pollLast();
                    }
                }
            }
            if (isError) {
                bw.write("error\n");
            } else {
                bw.write("[");
                if(popFirst) {
                    for (int j = nums.size()-1; j > 0; j--) {
                        bw.write(nums.pollFirst() + ",");
                    }
                    if(!nums.isEmpty())
                        bw.write(nums.pollFirst().toString());
                }
                else {
                    for (int j = nums.size()-1; j > 0; j--) {
                        bw.write(nums.pollLast() + ",");
                    }
                    if(!nums.isEmpty())
                        bw.write(nums.pollLast().toString());
                }
                bw.write("]\n");
            }
        }
        bw.flush();
        bw.close();
    }
}

 

반응형