BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
ArrayList<Collection> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
if (st1.nextToken().equals("0")) {
Queue<String> q = new ArrayDeque<>();
q.offer(st2.nextToken());
list.add(q);
} else {
Stack<String> stack = new Stack<>();
stack.push(st2.nextToken());
list.add(stack);
}
}
int M = Integer.parseInt(br.readLine());
st1 = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < M; i++) {
String pop = st1.nextToken();
for (int j = 0; j < list.size(); j++) {
Collection c = list.get(j);
if (c instanceof Stack<?>) {
Stack<String> stack = (Stack<String>) c;
stack.push(pop);
pop = stack.pop();
} else {
Queue<String> queue = (Queue<String>) c;
queue.offer(pop);
pop = queue.poll();
}
}
sb.append(pop).append(" ");
}
System.out.println(sb);
큰 생각 없이 문제에서 주어진 그대로 냅다 코드를 작성했고 그 결과 당연히 시간초과 😂
말 그대로 스택과 큐를 만들고 거기에 주어진 수도 다 넣고 빼고..ㅎ
그리고 두 번째로 복잡함을 조금 더 줄여 작성한 코드
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
int[] arrCollection = new int[N];
String[] arr = new String[N];
for (int i = 0; i < N; i++) {
arrCollection[i] = Integer.parseInt(st1.nextToken());
arr[i] = st2.nextToken();
}
int M = Integer.parseInt(br.readLine());
st1 = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < M; i++) {
String pop = st1.nextToken();
for (int j = 0; j < arrCollection.length; j++) {
if (arrCollection[j] == 0) {
String tmp = arr[j];
arr[j] = pop;
pop = tmp;
}
}
sb.append(pop).append(" ");
}
System.out.println(sb);
스택과 큐를 판별할 수 있는 배열 arrCollection과 stackqueue에 담긴 원소를 가진 배열 arr를 만들었다.
queue인 경우엔 해당 인덱스의 arr 값과 입력받은 수를 바꾸고, stack인 경우 입력받은 수를 그대로 둔다. (String pop에 저장)
그리고 마지막으로 pop을 출력하는데, 이 역시 시간 초과였다.
많은 고민 후 최종적으로 성공한 코드..
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); //queuestack 개수
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
Deque<String> d = new ArrayDeque<>();
for (int i = 0; i < N; i++) {
String stackOrQueue = st1.nextToken();
String val = st2.nextToken();
if (stackOrQueue.equals("0")) {
d.offer(val); //queue인 경우에만 deque에 넣음
}
}
int M = Integer.parseInt(br.readLine()); //queuestack에 삽입할 원소의 수
st1 = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < M; i++) {
d.offerFirst(st1.nextToken());
sb.append(d.pollLast()).append(" ");
}
System.out.println(sb);