본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 - 24511번: queuestack [Java]

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

 

24511번: queuestack

첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가 큐라면 $A_i = 0$, 스택이라면 $A_i = 1$이다. 셋째 줄

www.acmicpc.net

1. 코드

import java.io.*;
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());
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringTokenizer st2 = new StringTokenizer(br.readLine());
		Deque <Integer> d = new ArrayDeque<>();
		while(N-- > 0) {
			int n = Integer.parseInt(st2.nextToken());
			if(Integer.parseInt(st.nextToken()) == 0) {
				d.add(n);
			}
		}
		
		N = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		while(N-- > 0) {
			 int n = Integer.parseInt(st.nextToken());
			 d.addFirst(n);
			 sb.append(d.removeLast()).append(' ');
		}
		System.out.println(sb.toString());
	}
}

2. 설명

예제 1 과정

문제에 대해서 이해를 온전히 못해서 그림을 그려가며 과정을 추론했습니다. 스택인 부분은 어떠한 변화가 존재하지 않는데 큐인 부분은 제거되거나 추가되는 움직임을 알 수 있습니다.

예제 2 과정

예제 2에는 스택 부분만 존재하는데 이때 스택 부분에 대한 값들은 변화 없이 입력된 값들만 추가 및 제거되는 것을 확인할 수 있습니다.

따라서 큐인 부분만 추가 및 제거하는 것으로 생각되어 예제 1의 과정과 같이 덱을 이용하여 입력에 의해 추가되는 것은 첫 번째 요소에 추가를 진행하고 제거되는 것은 마지막 요소를 제거하니 문제가 해결되었습니다.

3. 정리

이 설명은 이해를 온전하게 한 상태로 푼 문제가 아니라 추측으로 이루어진 것이기에 틀린 내용이 존재할 수 있습니다.