[백준] 24511- queuestack (JAVA)

leeng·2024년 6월 25일
0

요즘에는 다시 백준 단계별로 풀어보기를 차근차근 풀어보는 중이어서 블로그에는 적지 않고 깃허브에만 올리고 있다. (아무도 안 궁금하겠지만... 깃헙 주소: https://github.com/eunju-lee-991/backjoon-step-by-step.git)

그런데 스택, 큐, 덱 단계에서 메모리 제한이나 시간 제한을 둔 문제들이 꽤 나왔고 24511 queuestack에서 시간 초과로 많은 빠꾸... 아니 고배를 마셨기에 복기해보려고 한다.

처음에는 그냥 단순히 배열로 풀어보려다 -> 시간초과
배열을 2개 써서? 2차원 배열로 간다 -> 시간초과
배열을 0(queue)만 저장 -> 시간초과
0(queue)인 값의 갯수까지 저장해서 그만큼만 for문 -> 시간초과
......

결국 구글링해서 Deque를 쓰면 된다는 걸 깨달았다.
사실 나는 스택,큐,덱에서 덱이 뭔지도 몰랐던 사람인지라 Deque가 한 번에 생각나지 않았던 것 같다.
막상 깨닫고 나니 어렵지 않은 문제였다!
Deque를 잘 기억해두자

import java.io.*;
import java.util.*;

// 24511 queuestack
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        Deque<Integer> deque = new ArrayDeque<>();
        StringTokenizer tokenizer = new StringTokenizer(br.readLine());
        StringTokenizer tokenizer2 = new StringTokenizer(br.readLine());

        for (int i = 0; i < n; i++) {
            String value = tokenizer2.nextToken();
            if (tokenizer.nextToken().equals("0")) {
                deque.add(Integer.parseInt(value));
            }
        }

        n = Integer.parseInt(br.readLine());
        tokenizer = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            int input = Integer.parseInt(tokenizer.nextToken());
            deque.offerFirst(input);
            bw.write(deque.pollLast() + " ");
        }

        br.close();

        bw.flush();
        bw.close();
    }
}
profile
기술블로그보다는 기록블로그

0개의 댓글