본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[boj] 백준 2812 크게 만들기 (c++) - deque

[문제]

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

 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

[풀이]

deque을 이용해서 풀 수 있다.

 

[코드]

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
#include <stack>
#define INF 987654321

using namespace std;

int n, k;
string s;

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

    cin >> n >> k;
    cin >> s;

    deque<char> dq;

    for(int i=0; i<s.length(); i++){
        while(!dq.empty() && k && s[i] > dq.back()){
            dq.pop_back();
            k--;
        }
        dq.push_back(s[i]);
    }

    for (int i = 0; i < dq.size()-k ; i++)
        cout << dq[i];

}