본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 1811번 : 카드 놓기

반응형

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

 

18115번: 카드 놓기

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

www.acmicpc.net

자료구조 (deque)를 사용한 문제였습니다.

 

 

 

📕 풀이방법

연산을 되감기 한다고 생각해 봅시다. 예제 입력2가

5

2 3 3 2 1

일 때 1 2 3 4 5라는 배열이 완성되어야 합니다. 여기서 답을 구하려면 2 3 3 2 1을 역순으로 배치해야합니다. 1 2 3 3 2를 한다면 원래 배열을 찾을 수 있습니다. 행동을 반대로 한다면 되감기 처럼 원래 상태가 된다고 이해하면 생각하기 수월할 것 같습니다.

 


 

 

📕 Code

#include <bits/stdc++.h>
using namespace std;
int n, op[1000001];
deque <int> cards;

int main(){
    cin >> n;

    int num = 1;
    for(int i = n; i >= 1; i--) cin >> op[i];
    for(int i = 1; i <= n; i++) {

        if(op[i] == 1) {
            cards.push_front(num);
        }

        else if(op[i] == 2){
            int tmp = cards.front();
            cards.pop_front();
            cards.push_front(num);
            cards.push_front(tmp);
        }

        else {
            cards.push_back(num);
        }
        num++;
    }

    for(auto c : cards) cout << c << ' ';
}