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
말이 너무 길어서 처음에 이해하는데 시간이 좀 걸렸다
그런데 차근차근 그림으로 그려가며 이해를 해보면
사실 큐와 스택의 구조를 가지고 있다고는 하지만
스택 특성상 삽입된 원소가 가장 먼저 pop되는 형식이다
따라서 스택의 경우엔 여기서는 그냥 지나쳐가는 필요 없는 원소라는 뜻이다
결과적으로 큐인 자료구조일 경우에만 계산을 해주면 된다
수열 A (0, 1, 1, 0)
수열 B (1, 2, 3, 4)에서 queue(수열 A에서 0인것)만 queuestack에 삽입 ->push_back
queuestack(1, 4)
수열 C (2, 4, 7)을 questack에 삽입 ->push_front
queuestack(7, 4, 2, 1, 4)
넣어주는 순서를 주의해주어야한다
처음에 넣어줄때는 push_back, 삽입원소들을 넣을때는 push_front를 해주어야한다
따라서 해당 자료구조(queuestack)는 deque로 구현했다
결과적으로 삽입되는 원소 갯수만큼 pop_back해주면 된다
#include<iostream>
#include <vector>
#include <deque>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
//입력
int N = 0; //자료구조 개수
cin >> N;
int a = 0; //큐 or 스택
vector<int> A;
for (int i = 0; i < N; i++)
{
cin >> a;
A.push_back(a);
}
int b = 0; //자료구조 원소
deque<int> deq;
for (int i = 0; i < N; i++)
{
cin >> b;
if(A[i] == 0)
{
deq.push_back(b);
}
}
int M; //삽입할 수열 길이
cin >> M;
int c = 0; //삽입할 수열
for (int i = 0; i < M; i++)
{
cin >> c;
deq.push_front(c);
}
for (int i = 0; i < M; i++)
{
cout << deq.back() << " ";
deq.pop_back();
}
return 0;
}
'> 코딩테스트' 카테고리의 다른 글
[프로그래머스] 의상 C++ (0) | 2024.01.23 |
---|---|
[프로그래머스] 디펜스 게임 C++ (0) | 2023.12.26 |
[백준] 28279 덱2 (C++) (2) | 2023.11.08 |
[백준] 10816 숫자카드2 (C++) (1) | 2023.10.31 |
[백준] 7785 회사에 있는 사람 (C++) (0) | 2023.10.27 |