1406 - 에디터

slee2·2022년 1월 2일
0

백준

목록 보기
18/20

문제

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

풀이

로직은 커서 기준으로 왼쪽 오른쪽 덱을 따로 나누어 계산하는 것이다.

커서가 왼쪽으로 한칸 이동해야 한다면 Left덱의 마지막 값을 Right덱의 첫번째 값으로 추가하는 방식이다.

또, Scanner을 쓰면 시간초과가 나오므로 BufferWriter와 BufferReader을 이용하는 것도 중요하다.

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

public class Num1406 {

    public static String N;
    public static int M;
    public static Deque<String> leftDeque = new ArrayDeque<>();
    public static Deque<String> rightDeque = new ArrayDeque<>();

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

        N = br.readLine();
        M = Integer.parseInt(br.readLine());

        String[] ab = N.split("");
        for (String s : ab) {
            leftDeque.addLast(s);
        }

        //logic
        for (int i=0; i<M; i++) {
            String a = br.readLine();
            char c = a.charAt(0);
            switch (c) {
                case 'L':
                    if (!leftDeque.isEmpty())
                        rightDeque.addFirst(leftDeque.pollLast());
                    break;
                case 'D':
                    if (!rightDeque.isEmpty())
                        leftDeque.addLast(rightDeque.pollFirst());
                    break;
                case 'B':
                    if (!leftDeque.isEmpty())
                        leftDeque.removeLast();
                    break;
                case 'P':
                    char t = a.charAt(2);
                    leftDeque.addLast(String.valueOf(t));
                    break;
                default:
                    break;
            }
        }

        //output
        while (!leftDeque.isEmpty())
            sb.append(leftDeque.pollFirst());
        while (!rightDeque.isEmpty())
            sb.append(rightDeque.pollFirst());
        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }
}

0개의 댓글

관련 채용 정보