정화 코딩

[C++] 카드 놓기 (백준 18115번) 본문

PS

[C++] 카드 놓기 (백준 18115번)

jungh150c 2024. 9. 9. 01:25

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

 

#include <iostream>
#include <vector>
#include <deque>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;

    vector<int> ac(n);
    for (int i = 0; i < n; i++) cin >> ac[i];

    deque<int> dq;
    for (int i = n - 1; i >= 0; i--) {
        if (ac[i] == 1) {
            dq.push_front(n - i);
        } else if (ac[i] == 2) {
            int tmp = dq.front();
            dq.pop_front();
            dq.push_front(n - i);
            dq.push_front(tmp);
        } else if (ac[i] == 3) {
            dq.push_back(n - i);
        }
    }

    for (int i = 0; i < n; i++) {
        cout << dq.front() << ' ';
        dq.pop_front();
    }
    cout << '\n';
}

행동들을 뒤에서부터 읽으면서 1번이면 해당 카드를 덱의 맨 앞에 넣고, 2번이면 덱의 맨 앞에 있는 카드를 뻰 다음 해당 카드를 덱의 맨 앞에 넣고 원래 있었던 카드를 다시 맨 앞에 넣고, 3번이면 해당 카드를 덱의 맨 뒤에 넣는다. (AC)

 

Comments