파게로그

[백준 1406번] 에디터 본문

콤퓨타 왕왕기초/PS

[백준 1406번] 에디터

파게 2021. 4. 13. 06:58

문제 링크: 1406번 에디터

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

 

스택 2개를 사용하거나, 덱 1개를 사용하거나 둘 중 편한 방법을 이용하면 된다.

덱을 선후가 있는 연결 리스트로 보았을 때 head는 커서 바로 오른쪽, tail은 커서 바로 왼쪽이라고 생각하면 된다. 그래서 커서를 왼쪽으로 옮길 때마다 마지막 것을 왼쪽으로 옮기고 

하지만 환형 구조인 만큼 커서를 마지막에서 오른쪽으로 옮기면 처음으로 돌아온다든가 처음에서 왼쪽으로 옮기면 마지막으로 돌아간가든가 하는 것을 막지 못하기에, cursor 변수를 통해 이를 방지해야 한다.

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String init = br.readLine();
        Deque<Character> deque = new LinkedList<>();
        for (int i = 0; i < init.length(); i++)
            deque.offerLast(init.charAt(i));

        int cursor = init.length();

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

            char comm = st.nextToken().charAt(0);

            if (comm == 'L') {
                if (cursor == 0) continue;
                char c = deque.pollLast();
                deque.offerFirst(c);
                cursor--;
            } else if (comm == 'D') {
                if (cursor == deque.size()) continue;
                char c = deque.pollFirst();
                deque.offerLast(c);
                cursor++;
            } else if (comm == 'B') {
                if (cursor == 0) continue;
                deque.pollLast();
                cursor--;
            } else { // comm == 'P'
                char toInput = st.nextToken().charAt(0);
                deque.offerLast(toInput);
                cursor++;
            }
        }

        for (int i = 0; i < cursor; i++) {
            char c = deque.pollLast();
            deque.offerFirst(c);
        }

        StringBuilder sb = new StringBuilder();
        while (deque.size() != 0)
            sb.append(deque.pollFirst());
        System.out.print(sb);
    }
}

 

Comments