백준 5430 AC (Java,자바)

jonghyukLee·2022년 4월 14일
0

이번에 풀어본 문제는
백준 5430번 AC 입니다.

📕 문제 링크

❗️코드

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

public class Main {
    static Deque<String> dq;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        while(T-- > 0)
        {
            String cmd = br.readLine();
            int n = Integer.parseInt(br.readLine());

            String input = br.readLine();
            StringTokenizer st = new StringTokenizer(input,"[,]");
            dq = new ArrayDeque<>();
            for(int i = 0; i < n; i++) dq.add(st.nextToken());
            sb.append(doCmd(cmd)).append("\n");
        }
        System.out.print(sb);
    }
    static String doCmd(String cmd)
    {
        boolean isFirst = true;
        for(char c : cmd.toCharArray())
        {
            // 뒤집기
            if(c == 'R') isFirst = !isFirst;
            // 버리기
            else
            {
                if(dq.isEmpty()) return "error";
                // 방향이 first
                if(isFirst) dq.pollFirst();
                else dq.pollLast();
            }
        }
        StringBuilder sb = new StringBuilder("[");
        if(isFirst) while(!dq.isEmpty()) sb.append(dq.pollFirst()).append(",");
        else while(!dq.isEmpty()) sb.append(dq.pollLast()).append(",");
        
        if(sb.length() > 1) sb.deleteCharAt(sb.length()-1);
        return sb.toString()+"]";
    }
}

📝 풀이

두 가지 연산 R과 D를 사용해 입력된 문자열을 변환시킨 결과를 출력하는 문제입니다. 배열을 뒤집게되면 시간초과가 염려되어 deque를 사용해 포인터의 위치를 바꾸는 방향으로 구현해 보았습니다. 원하는 출력 값에 맞게 변환하는 과정이 조금 지저분 하긴 하지만, 구현 자체는 간단한 문제라고 생각합니다.

📜 후기

Deque를 처음 써본 것 같네요. 써보진 않았지만 알고있었던 자료구조여서 적합하다고 생각하여 활용해보았습니다.

profile
머무르지 않기!

0개의 댓글