Programming/BOJ

[백준/BOJ] 18115 카드 놓기

he1fire 2020. 11. 20. 01:00
728x90

문제 : 18115 카드 놓기

 

18115번: 카드 놓기

수현이는 카드 기술을 연습하고 있다. 수현이의 손에 들린 카드를 하나씩 내려놓아 바닥에 쌓으려고 한다. 수현이가 쓸 수 있는 기술은 다음 3가지다. 제일 위의 카드 1장을 바닥에 내려놓는다.

www.acmicpc.net

카드를 내려놓은 순서가 주어질 때,

원래의 카드 순서를 복구하는 문제이다.

deque 자료형을 이용해 앞뒤로 집어넣은 후 출력하면 된다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N;
vector<ll> arr;
deque<ll> dq;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    for (int i=0;i<N;i++){
        ll a;
        cin >> a;
        arr.push_back(a);
    }
    reverse(arr.begin(), arr.end());
    for (int i=1;i<=N;i++){
        if (arr[i-1]==1)
            dq.push_front(i);
        if (arr[i-1]==2){
            ll a=dq.front();
            dq.pop_front();
            dq.push_front(i);
            dq.push_front(a);
        }
        if (arr[i-1]==3)
            dq.push_back(i);
    }
    while(!dq.empty()){
        cout << dq.front() << " ";
        dq.pop_front();
    }
    return 0;
}
728x90