상세 컨텐츠

본문 제목

< 백준 BaekJoon : 24511번 queuestack> C++

C++/Baekjoon

by J2on 2024. 1. 23. 22:14

본문

<< 문제 >> 

https://www.acmicpc.net/problem/24511

 

24511번: queuestack

첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가 큐라면 $A_i = 0$, 스택이라면 $A_i = 1$이다. 셋째 줄

www.acmicpc.net

 

재밌는건 해당하는 위치가 Queue 자료구조인 경우만 숫자가 움직인다. 

 

나머지 숫자는 무시하고 Queue인 경우만 stack에 쌓는다.

 

또, 이후 입력되는 숫자는 queue에 쌓는다. 

 

이후 수에 맞춰 stack의 숫자를 출력하고, 부족하다면 queue에 쌓인 숫자까지 순서대로 출력하면 된다.

 

 

<< 코드 >>

 

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  
  int n;
  cin >> n;

  // data structure의 종류 확인
  int dsList[n];
  stack<int> st;
  for(int i=0; i<n; i++){
    cin >> dsList[i];  
  }
  // Queue인 경우에만 stack에 쌓는다. 
  // Stack인 경우엔 바뀌지 않으니 
  int temp;
  for(int i:dsList){
    cin >> temp;
    if(i==0){
      st.push(temp);
    }
  }
  // 뒤에 입력될 수를 queue에 담는다.
  queue<int> q;
  int m;
  cin >> m;
  for(int i=0; i<m; i++){
    cin >> temp;
    q.push(temp);
  }
  // stack에 있는 수 먼저 출력
  while(!st.empty() && m != 0){
    cout << st.top() << ' ';
    st.pop();
    m--;
  }
  // 모자르다면 q에 있는 수도 출력
  if(m != 0){
    for(int i=0; i<m; i++){
      cout << q.front() << ' ';
      q.pop();
    }
  }
}

 

 

 

 

 

<< 깃헙 >>

https://github.com/J2on/StudyAlgorithm_Part2/tree/main/%EB%B0%B1%EC%A4%80/Silver/24511.%E2%80%85queuestack

 

 

관련글 더보기

댓글 영역