[ 문제 ]
한가롭게 방학에 놀고 있던 도현이는 갑자기 재밌는 자료구조를 생각해냈다. 그 자료구조의 이름은 queuestack이다.
queuestack의 구조는 다음과 같다.
번, 번, ... , 번의 자료구조(queue 혹은 stack)가 나열되어있으며, 각각의 자료구조에는 한 개의 원소가 들어있다.
queuestack의 작동은 다음과 같다.
queuestack에 넣을 원소들이 주어졌을 때, 해당 원소를 넣은 리턴값을 출력하는 프로그램을 작성해보자.
- 을 입력받는다.
- 을 번 자료구조에 삽입한 뒤 번 자료구조에서 원소를 pop한다. 그때 pop된 원소를 이라 한다.
- 을 번 자료구조에 삽입한 뒤 번 자료구조에서 원소를 pop한다. 그때 pop된 원소를 이라 한다.
...- 을 번 자료구조에 삽입한 뒤 번 자료구조에서 원소를 pop한다. 그때 pop된 원소를 이라 한다.
- 을 리턴한다.
도현이는 길이 의 수열 를 가져와서 수열의 원소를 앞에서부터 차례대로 queuestack에 삽입할 것이다. 이전에 삽입한 결과는 남아 있다. (예제 참고)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N개의 자료구조
int N = Integer.parseInt(br.readLine());
Deque<Integer> stack = new ArrayDeque<>();
Deque<Integer> queue = new ArrayDeque<>();
StringBuilder ans = new StringBuilder();
// 자료구조 유형 -> 1이면 스택, 0이면 큐
StringTokenizer st1 = new StringTokenizer(br.readLine());
// 자료구조 내에 담긴 값들
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i = 0 ; i < N ; i++) {
int typ = Integer.parseInt(st1.nextToken());
int val = Integer.parseInt(st2.nextToken());
if(typ == 0) {
queue.add(val);
}
}
int M = Integer.parseInt(br.readLine());
StringTokenizer st3 = new StringTokenizer(br.readLine());
for(int i = 0 ; i < M ; i++) {
int t = Integer.parseInt(st3.nextToken());
queue.push(t);
t = queue.pollLast();
ans.append(t).append(" ");
}
System.out.println(ans);
}
}
백준 24511번 : https://www.acmicpc.net/problem/24511