[백준/JAVA] 24511번 queuestack

정은아·2024년 2월 18일
post-thumbnail

문제

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;


public class Main extends Exception {
    public static void main(String[] args) throws IOException {

        // 큐일때만 숫자가 작동하므로 디큐를 만든다.
        // 값을 'offerLast'로 추가하되, 1인 자리의 값은 추가하지 않는다.
        // 추가한 첫 값을 offerFirst하고, pollLast한 값은 출력한다.
        // 반복한다.

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // 처음 몇개의 자료구조를 만들 것인지 값을 받는다.
        int num = Integer.parseInt(br.readLine());

        // 지금부터 쪼개줘야하니까 받아온다.
        StringTokenizer st = new StringTokenizer(br.readLine());
        // 큐인 경우에만 값을 추가할 것이기 때문에 boolean배열을 따로 만든다.
        boolean[] flag = new boolean[num];

        // num만큼 for문을 돌려서 0일 경우에는 flag를 true로 바꾼다.
        for (int i = 0; i < num; i++) {
            // 비교를 위해 값은 따로 받는다.
            int queuestack = Integer.parseInt(st.nextToken());

            if (queuestack == 0) {
                flag[i] = true;
            }
        }

        // 디큐를 만든다.
        Deque<Integer> deque = new ArrayDeque<>();
        // 값을 쪼개 받아야하니 다시 선언한다.
        st = new StringTokenizer(br.readLine());

        // for문을 다시 num만큼 돌려서 값을 추가한다.
        for (int i = 0; i < num; i++) {
            // 큐인 경우에만 값을 받아야하므로 따로 변수를 만들어 값을 미리 받는다.
            int questack = Integer.parseInt(st.nextToken());

            // flag가 true인 경우(큐)에만 값을 offerLast로 받아온다.
            // 입력값대로 들어와야하므로 offerLast로 받는다.
            if (flag[i] == true){
                deque.offerLast(questack);
            }
        }

        // 값을 추가할 개수를 받는다.
        int c = Integer.parseInt(br.readLine());
        
        // 쪼개야하니까 또 선언한다.
        st = new StringTokenizer(br.readLine());

        // 추가로 받을 자료구조의 개수만큼 for문을 돌린다.
        for (int i = 0; i < c; i++) {
            // 값은 따로 받는다.
            int queuestack = Integer.parseInt(st.nextToken());

            // 값들이 이동해야하므로 offerFirst - pollLast 한다.
            deque.offerFirst(queuestack);
            // sb.append(deque.pollLast()) 하지 않고 변수에 따로 담는다.
            int pl = deque.pollLast();

            // 출력한다.
            sb.append(pl).append(' ');
        }

        System.out.println(sb.toString());
    }
}

느낀점

도현이는 도대체 뭐가 문제일까?
그냥 있는 자료구조 잘~ 쓰면 되는데.. 왜 잘난척하는걸까?
그래서 고통은 왜 내가 받을까?

stack일 경우에는 값이 그대로 있기 때문에 queue일때만 값을 이동하고, 출력하면 된다.
나는 모든 큐 문제는 디큐로 만들기로 결심했기 때문에 디큐를 만들었다.
디큐...데크..덱.. 뭐 암튼^^

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글