본문 바로가기

코딩테스트/백준

[백준 JAVA] 24511. queuestack

문제 링크


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

접근 방법


입력으로 주어지는 자료구조 정보 중, 큐(0)인 것만 초기 상태에서 의미를 가집니다.
스택(1)은 이후의 연산에서 영향을 주지 않으므로 제외할 수 있습니다.

초기값 중 큐(0)에 해당하는 값들을 덱의 앞쪽에 순서대로 삽입한 뒤,
새로운 수열의 값들을 덱의 뒤쪽에 하나씩 넣으면서 앞에서 하나씩 빼내어 출력하면 됩니다.

소스 코드


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] isQ = br.readLine().split(" ");
        String[] init = br.readLine().split(" ");
        int m = Integer.parseInt(br.readLine());
        String[] seqC = br.readLine().split(" ");

        Deque<String> d = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            if (isQ[i].equals("0")) {
                d.addFirst(init[i]);
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < m; i++) {
            d.addLast(seqC[i]);
            sb.append(d.pollFirst()).append(" ");
        }

        System.out.println(sb);
    }
}

코드 설명


isQ[i]"0"인 경우에만 초기값을 덱 앞에 넣습니다.
덱은 삽입과 삭제가 모두 양 끝에서 가능한 자료구조이므로, 큐의 성질을 유지하면서 새로 들어오는 수를 뒤에 넣고 앞에서 꺼낼 수 있습니다.
StringBuilder를 이용해 결과 문자열을 빠르게 구성하여 출력합니다.