반응형
https://www.acmicpc.net/problem/24511
소스코드
import java.io.*;
import java.util.*;
public class prac {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] queuestack = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
queuestack[i] = Integer.parseInt(st.nextToken()); // 해당 인덱스의 자료구조가 큐인지 스택인지
}
Deque<Integer> dq = new ArrayDeque<>(); // 값을 넣고 뺼 덱 생성
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
int k = Integer.parseInt(st.nextToken());
if (queuestack[i] == 0) { // stack은 후입선출이라 넣었다 빼는 값이 같기 때문에 제외하고 큐만 취급
dq.add(k);
}
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) {
int v = Integer.parseInt(st.nextToken());
dq.addFirst(v);
sb.append(dq.pollLast()).append(" ");
}
System.out.println(sb);
}
}
풀이
★ 생각보다 어려웠던 문제였습니다 ! 처음엔 이중 for문을 사용해서 구현하였습니다. 그랬더니 시간 초과를 받았고, 입력 값 크기를 살펴보니 n과 m이 각각 100,000까지 들어올 수 있기 때문에 이중 for문을 사용하면 100억의 연산과정이 필요하게 됩니다 !
★ 큐는 선입선출의 구조를, 스택은 후입선출의 구조를 가지고 있습니다. 문제에서 주어진 조건을 확인해보면 stack의 경우엔 들어간 값이 바로 제거되기 때문에 굳이 고려해주지 않아도 됩니다 ! 그렇기에 queue 구조만 확인해주면 됩니다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준 알고리즘] 1966번: 프린터 큐 (JAVA) (0) | 2025.01.11 |
---|---|
[백준 알고리즘] 17836번: 공주님을 구해라! (JAVA) (0) | 2025.01.02 |
[백준 알고리즘] 10423번: 전기가 부족해 (JAVA) (0) | 2024.02.22 |
[백준 알고리즘] 1268번: 임시 반장 정하기 (JAVA) (0) | 2024.02.14 |
[백준 알고리즘] 7570번: 줄 세우기 (JAVA) (0) | 2024.02.13 |