알고리즘

백준 1406번 에디터 (JAVA)

박카스마시며코딩 2022. 8. 10. 16:35

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

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

 

저는 구현을 통해서 문제를 해결하였습니다.

저는 2개의 LinkedList를 통해 커서의 왼쪽에 있는 것과 오른쪽에 있는 것을 나누었습니다.

커서을 옮길때, 만약 왼쪽으로 옮긴다면 왼쪽의 LinedList의 맨 뒤에 있는 것을 오른쪽의 LinkedList 맨 앞에 놓도록 하였습니다. 오른쪽이라면 반대로 진행하도록 하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Stack;

public class BOJ_1406 {
    private static final char MOVE_LEFT = 'L';
    private static final char MOVE_RIGHT = 'D';
    private static final char DELETE_LEFT = 'B';
    private static final char APPEND = 'P';
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        LinkedList<Character> left = new LinkedList<>();
        LinkedList<Character> right = new LinkedList<>();
        String str = br.readLine();
        for(int i = 0 ; i < str.length() ; i++){
            left.offerLast(str.charAt(i));
        }
        int n = Integer.parseInt(br.readLine());
        for(int i = 0 ; i < n ; i++){
            String command = br.readLine();
            char type = command.charAt(0);
            if(type == MOVE_LEFT){
                if(!left.isEmpty()){
                    right.offerFirst(left.pollLast());
                }
                continue;
            }
            if(type == MOVE_RIGHT){
                if(!right.isEmpty()){
                    left.offerLast(right.pollFirst());
                }
                continue;
            }
            if(type == DELETE_LEFT){
                if(!left.isEmpty()){
                    left.pollLast();
                }
                continue;
            }
            if(type == APPEND){
                char ch = command.charAt(2);
                left.offerLast(ch);
            }
        }
        StringBuilder result = new StringBuilder();
        while(!right.isEmpty() || !left.isEmpty()){
            if(!left.isEmpty()){
                result.append(left.pollFirst());
                continue;
            }
            if(!right.isEmpty()){
                result.append(right.pollFirst());
                continue;
            }
        }
        System.out.println(result.toString());
    }
}