[백준] 24511번 - queuestack

팥빵·2025년 11월 11일

Baekjoon

목록 보기
46/49

>>문제 바로가기<<

Queue와 Stack의 기능을 섞은 가상의 자료구조를 만들어, Input에 따른 Output을 출력하는 문제이다.

보기보다 진입이 쉽지만, 의외로 헤맨 문제이다.

queuestack 자료구조는 아래와 같이 설계하면 된다.

  1. Stack 구간은 LILO 구조로써 변수가 그대로 지나가므로 무시한다.
  2. Queue구조만 남으므로 먼저 선언된 변수를 먼저 출력한다.
  3. 이후에 출력받는 나머지 변수들을 필요한 만큼 출력한다.

위 정보를 바탕으로 설계한 코드는 다음과 같다.


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

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));
        StringTokenizer st;
        
        Deque<Integer> q = new ArrayDeque<>();
        int N = Integer.parseInt(br.readLine());
        int[] type = new int[N];
        
        st = new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<N; i++){
        	int num = Integer.parseInt(st.nextToken());
            type[i] = num;
        }
        
        st = new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<N; i++){
        	int num = Integer.parseInt(st.nextToken());
            if(type[i] == 0){		// Queue인 경우만 데이터 삽입
            	q.addFirst(num);	// 입구쪽으로 집어넣어야 빼낼 때 순서대로 나옴
            }
        }
        
        int M = Integer.parseInt(br.readLine());
        int[] inputData = new int[M];
        
        st = new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<M; i++){
        	int num = Integer.parseInt(st.nextToken());
        	inputData[i] = num;
        }
        
        int inputSeq = 0;
        int outputCount = 0;
        
        while(!q.isEmpty() && outputCount < M){
        	bw.write(q.pollFirst() + " ");
            outputCount++;
            // Deque에 요소가 있을 때 and 요구하는 출력 수만큼만 빼냄
        }
        
        while(outputCount < M){
        	bw.write(inputData[inputSeq] + " ");
            outputCount++;
            inputSeq++;
            // Deque에 더 이상 요소가 없을 경우 inputData에서 순서대로 출력
        }
        bw.flush();
        bw.close();
    }
}

맞았습니다!!

profile
반갑습니다

0개의 댓글