백준-5430번

문딤·2022년 7월 29일
0

AC.

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

풀이 생각

// 테스트 케이스 갯수
// 함수동작  찢어서 해당 FUNCTION별로 움직이게
// ARRAYDEQUE 사용.
//deque에 담고 상황에 따라 어떻게 뽑아줄것인지

소스코드

Main

 public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());
        StringTokenizer st;

        //테스트 케이스 갯수 만큼 만들기 , 3줄
        for (int i = 0; i <T ; i++) {
           String fun= br.readLine();
            N =Integer.parseInt(br.readLine());

           st = new StringTokenizer(br.readLine(),"[],");
           d = new ArrayDeque<>();
           for (int j = 0; j < N; j++) {
                d.add(Integer.parseInt(st.nextToken()));
            }
            FunctionRun(d,fun);
        }
        System.out.println(sb);
    }

Function 구현부


static void FunctionRun(ArrayDeque d, String fun){
        //fun 분할.
        
        int len = fun.length();
        boolean Run = true;

        Character [] str  =new Character[len];

        for (int i = 0; i < len; i++) {
            str[i] = fun.charAt(i);

            if(str[i] == 'R'){
                Run= !Run;
                continue;
                }

            if(Run){
            if(d.pollFirst() ==null){
                sb.append("error\n");
                return;
            }
            }else{
                if(d.pollLast() ==null){
                    sb.append("error\n");
                    return;
                }
            }
        }
        StringSum(d,Run);
    }

출력 result 부분


   static void StringSum(ArrayDeque d, boolean Run){

        //이제 조합
        sb.append('[');
        if (d.size()>0){
            if(Run){
                sb.append(d.pollFirst());
                while(!d.isEmpty()){
                    sb.append(',').append(d.pollFirst());
                }
            }else{
                sb.append(d.pollLast());
                while(!d.isEmpty()){
                    sb.append(',').append(d.pollLast());
                }
            }
        }
        sb.append(']').append('\n');
    }

얻은 것

tokenizer를 활용해서 split 느낌으로 잘라내는 법 " " 말고 다른 사용법.
Stringbuilder를 이용해서 원하는 타이밍에 붙이고 자르는 방법에 대해 고민해봄.
boolean을 통해 분기를 나누는 방식도 직관적으로 이해가 잘되었다.

참고

https://st-lab.tistory.com/221

profile
풀스택개발자가 될래요

0개의 댓글