[백준 | Java] 1406 에디터

알린·2024년 1월 8일

baekjoon

목록 보기
5/68

내 답안

  • 커서를 기준으로 두 개의 stack을 사용
  • 커서 기준 왼쪽: stack, 커서 기준 오른쪽: tmp
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        Stack<String> stack = new Stack<>();
        Stack<String> tmp = new Stack<>();
        String str = br.readLine();
        int N = str.length();
        int M = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            stack.push(str.substring(i, i+1));
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine(), " ");

            switch (st.nextToken()) {
                case "L":
                    if(stack.empty())
                        break;
                    else {
                        tmp.push(stack.pop());
                        break;
                    }

                case "D":
                    if(tmp.empty())
                        break;
                    else {
                        stack.push(tmp.pop());
                        break;
                    }

                case "B":
                    if(stack.empty())
                        break;
                    else {
                        stack.pop();
                        break;
                    }

                case "P":
                    stack.push(st.nextToken());
                    break;
            }
        }

        while (!stack.empty()) {
            sb.append(stack.pop());
        }
        sb.reverse();

        while (!tmp.empty()) {
            sb.append(tmp.pop());
        }

        System.out.println(sb);
    }
}

실행 결과

profile
짱이 되고싶은 개발 기록

0개의 댓글