백준 AC 5430 java

정상민·2023년 8월 7일

문제링크

문제접근

  • R 나올때 마다 뒤집지 말고 R여부를 boolean으로 체크
  • D 가 나올 때 R 값에 따라 앞 or 뒤 빼기
  • 마지막에 출력할 때 역시 R 값에 따라 앞부터 또는 뒤부터

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class baek_5430 {
    static int T;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        T = Integer.parseInt(st.nextToken());

        for(int t=0;t<T;t++){
            String order = br.readLine();
            int N = Integer.parseInt(br.readLine());
            String numbers = br.readLine();

//            st = new StringTokenizer(br.readLine(), "[],");
//            for(int i=0;i<N;i++){
//                list.add(Integer.parseInt(st.nextToken()));
//            }

            String substring = numbers.substring(1, numbers.length() - 1);
            String[] split = substring.split(",");
            ArrayList<Integer> list = new ArrayList<>();
            if(N == 0 && order.contains("D")){
                System.out.println("error");
                continue;
            }
            for(int i=0;i<N;i++){
                list.add(Integer.parseInt(split[i]));
            }
            boolean isReverse = false;
            boolean isError = false;
            for(int i=0;i<order.length();i++){
                char now = order.charAt(i);
                if(now == 'R') isReverse = !isReverse;
                if(now == 'D'){
                    if(list.size() == 0){
                        isError = true;
                        break;
                    }
                    else if(!isReverse) list.remove(0);
                    else if(isReverse) list.remove(list.size()-1);
                }
            }
            //////출력
            StringBuilder sb = new StringBuilder();
            if(isError){
                System.out.println("error");
            }
            else if(!isReverse){
                sb.append('[');
                for(int i=0;i<list.size();i++){
                    sb.append(list.get(i));
                    if(i != list.size()-1) sb.append(',');
                }
                sb.append(']');
                System.out.println(sb);
            }
            else{
                sb.append('[');
                for(int i=list.size()-1;i>=0;i--){
                    sb.append(list.get(i));
                    if(i != 0) sb.append(',');
                }
                sb.append(']');
                System.out.println(sb);
            }
            //////출력
        }
    }
}

결과

정리

            for(int i=0;i<split.length;i++){
                list.add(Integer.parseInt(split[i]));
            }
  • 여기서 split.length일 때 런타임 에러 발생, N으로 바꾸니 해결
  • 이유를 모르겠다
            st = new StringTokenizer(br.readLine(), "[],");
            for(int i=0;i<N;i++){
                list.add(Integer.parseInt(st.nextToken()));
            }
  • StringTokenizer에서 두 번째 인자 값 활용 가능
  • 입력 문자열에서 "[", "]" 빼는 것이 헷갈림
profile
안녕하세요! 개인 공부를 꾸준히 기록하는 공간입니다.

0개의 댓글