본문 바로가기
코딩테스트 준비/백준

[백준] 1406번 - 에디터 [Java]

by mwzz6 2025. 2. 11.

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

 

[백준] 1406번 - 에디터 [Java]
[백준] 1406번 - 에디터 [Java]
[백준] 1406번 - 에디터 [Java]


1.  아이디어

 

현재 커서의 앞에 있는 문자들과 뒤에 있는 문자들을 각각 담는 Deque, Stack 자료구조를 활용하면 간단하게 해결할 수 있다.


2. 문제풀이

 

현재 커서의 바로 앞 문자가 peek로 오는 Deque와 현재 커서 바로 뒤 문자가 peek로 오는 두 개의 Stack으로 명령들을 처리하면 됐다. 명령 수행 후 커서를 맨 앞으로 옮긴 후 모든 문자를 출력하는 방식으로 구현했다.


3. 코드

 

import java.io.*;
import java.util.*;

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

        Deque<Character> deque = new ArrayDeque<>();
        Deque<Character> stack = new ArrayDeque<>();

        char[] input = br.readLine().toCharArray();
        for (char c : input) {
            deque.addLast(c);
        }

        int M = Integer.parseInt(br.readLine());
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            char order = st.nextToken().charAt(0);

            if (order == 'L') {
                if (!deque.isEmpty()) {
                    stack.push(deque.removeLast());
                }
            } else if (order == 'D') {
                if (!stack.isEmpty()) {
                    deque.addLast(stack.pop());
                }
            } else if (order == 'B') {
                if (!deque.isEmpty()) {
                    deque.removeLast();
                }
            } else {
                char c = st.nextToken().charAt(0);
                deque.addLast(c);
            }
        }

        while (!deque.isEmpty()) {
            sb.append(deque.removeFirst());
        }

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

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기