728x90

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

 

5430번: AC

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

www.acmicpc.net

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Main_BJ_5430_AC {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= t; tc++) {
            StringBuilder sb = new StringBuilder();
            String p = br.readLine();
            int n = Integer.parseInt(br.readLine());
//            Deque<Character> q = new ArrayDeque<>();
            Deque<Integer> q = new ArrayDeque<>();
            StringTokenizer st = new StringTokenizer(br.readLine(),"[],");
            for(int i=0; i<n; i++) {
                q.offer(Integer.parseInt(st.nextToken()));
            }

//            안 되는 방법 : 배열에 들어갈 숫자는 최대 100이기 때문에 charAt을 사용해 끊으면 안 됨
//            30, 40이 3, 4로 끊겨 읽힘
//            String str = br.readLine();
//            for (int i = 1; i < str.length() - 1; i++) {
//                if (i % 2 == 1)
//                    q.offer(str.charAt(i));
//            }

            // deque의 앞을 보는지, 뒤를 보는지 : 앞이 true
            boolean flag = true;
            // error인지 아닌지
            boolean error = false;

            for (char command : p.toCharArray()) {
                if (command == 'R') { // 뒤집기
                    flag = !flag;
                } else { //버리기
                    if (q.isEmpty()) {
                        error = true;
                        break;
                    }

                    if (flag)
                        q.poll();
                    else
                        q.pollLast();
                }
            }//for

            if (!error) {
                sb.append("[");
                int size = q.size();
                if (flag) {
                    for (int i = 0; i < size; i++) {
                        if (i == size - 1)
                            sb.append(q.poll());
                        else
                            sb.append(q.poll()).append(",");
                    }
                } else {
                    for (int i = 0; i < size; i++) {
                        if (i == size - 1)
                            sb.append(q.pollLast());
                        else
                            sb.append(q.pollLast()).append(",");

                    }
                }

                sb.append("]").append("\n");
            }//if
            else
                sb.append("error").append("\n");

            System.out.print(sb);
        }//tc
    }//main
}

문제 자체는 어렵지 않은데,

1. 입력을 받아 [] ,를 제거하는 부분

2. 시간초과에 걸리지 않기 위해 StringBuilder를 사용하는 것

3. StringBuilder를 사용하면서 얻은 출력 형식 맞추기

이게 참 사람 발목을 잡았다.

 

구글링을 통해 확인하는데 어이없더라ㅋㅋㅋㅋㅋ

하여튼!! 가장 나에게 까다로웠던 1번 부분을 주석에 왜 안 되는지 적어두었다.

잊지 말자!!

728x90

'코테 > 백준' 카테고리의 다른 글

백준 1920 수 찾기(JAVA)  (0) 2023.01.12
백준 2869 달팽이는 올라가고 싶다(JAVA)  (0) 2023.01.12
백준 11047 동전0 (JAVA)  (0) 2023.01.11
백준 7569 토마토(JAVA)  (0) 2023.01.10
백준 2920 음계(JAVA)  (1) 2023.01.09

+ Recent posts