본문 바로가기
Problem Solving/Baekjoon

[백준] 27497 알파벳 블록 - Data Structure / Java

by graycode 2023. 6. 24.

 문제 링크

 

27497번: 알파벳 블록

첫째 줄에 버튼을 누른 횟수 $N$이 주어진다. $(1 \leq N \leq 1\,000\,000)$ 둘째 줄부터 $N$개의 줄에는 버튼을 누른 순서대로 누른 버튼에 대한 정보를 주며 아래와 같은 형식으로 주어진다. 1 c : 문자열

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;

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));

        int n = Integer.parseInt(br.readLine());

        Deque<Character> dq = new ArrayDeque<>();
        Stack<Boolean> stk = new Stack<>();

        while (n-- > 0) {
            String input = br.readLine();
            char op = input.charAt(0);

            if (op == '1') {
                dq.offerLast(input.charAt(2));
                stk.push(true);
            } else if (op == '2') {
                dq.offerFirst(input.charAt(2));
                stk.push(false);
            } else if (!dq.isEmpty()) {
                if (stk.pop()) dq.removeLast();
                else dq.removeFirst();
            }
        }

        StringBuilder sb = new StringBuilder();
        for (char c : dq)
            sb.append(c);

        bw.write(sb.length() > 0 ? sb.toString() : "0");
        bw.flush();
    }

}

댓글