

-Code
import java.io.*;
import java.util.*;
public class BOJ24511 {
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());
// 자료 구조 선택 배열 초기화
int[] queueOrStack = new int[n];
for (int i = 0; i < n; i++) {
queueOrStack[i] = Integer.parseInt(st.nextToken());
}
// 초기 자료구조 초기화
st = new StringTokenizer(br.readLine());
Deque<Integer> dq = new ArrayDeque<>();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(st.nextToken());
nums[i] = num;
// stack인 경우 값이 변하지 않으므로 제외해서 덱에 입력
if (queueOrStack[i] == 0) {
dq.addLast(num);
}
}
// 삽입할 수열 받고 로직 시작
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
StringBuilder answer = new StringBuilder();
for (int i = 0; i < m; i++) {
int nowNum = Integer.parseInt(st.nextToken());
// FIFO로 진행
dq.addFirst(nowNum);
answer.append(dq.pollLast()).append(" ");
}
// 출력
System.out.println(answer);
}
}
문제에 대해서 이해가 잘 안 되어서 문제 해설에 대해서 찾아봤습니다. 그 결과 각 원소마다 적용되는 자료 구조가 다르고 그 나눠진 자료구조를 따라 계산을 해야 합니다.
예시로 1번 예제와 같이 보면 [0, 1, 1, 0]인 경우 [큐, 스택, 스택, 큐] 이렇게 되어 다음 입력 배열인 [1(큐), 2(스택), 3(스택), 4(큐)] 형식으로 정해지게 됩니다.
또한 Stack으로 지정된 자료구조는 pop이 적용되면 맨 앞에서 값이 나오기 때문에 값의 변화가 없습니다.
1. 스택인 자료구조 [2, 3]이 있으면 예시값 1을 넣습니다 - [1, 2, 3]
2. pop을 진행하면 LIFO 형식이므로 1이 빠져나와이 되므로 값 변화가 없습니다 - [2, 3]
3. 즉 입력된 값인 1이 그대로 나오게 됩니다
위와같은 이유로 pop을 통해 나온 값이 다음 자료구조로 넘어가는데 Stack 자료구조는 넣었던 값이 나오므로 제외하고 queue에 속하는 자료형만 deque으로 받고 queue의 FIFO 형식으로 빼주게 되면 결과가 나오게 됩니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 1010번 다리 놓기 (0) | 2025.12.27 |
|---|---|
| [백준/Java] 24723번 녹색거탑 (0) | 2025.12.27 |
| [백준/Java] 11866번 요세푸스 문제 0 (0) | 2025.12.27 |
| [백준/Java] 28279번 덱 2 (0) | 2025.12.27 |
| [백준/Java] 12789번 도키도키 간식드리미 (0) | 2025.12.27 |