Skip to content

Commit

Permalink
[Gold III] Title: 크게 만들기, Time: 20 ms, Memory: 7512 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
belowyoon committed Apr 12, 2024
1 parent 100d2d2 commit ecb918c
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
30 changes: 30 additions & 0 deletions 백준/Gold/2812. 크게 만들기/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# [Gold III] 크게 만들기 - 2812

[문제 링크](https://www.acmicpc.net/problem/2812)

### 성능 요약

메모리: 7512 KB, 시간: 20 ms

### 분류

자료 구조, 그리디 알고리즘, 스택

### 제출 일자

2024년 4월 13일 03:12:48

### 문제 설명

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

### 입력

<p>첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000)</p>

<p>둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다.</p>

### 출력

<p>입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다.</p>

46 changes: 46 additions & 0 deletions 백준/Gold/2812. 크게 만들기/크게 만들기.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;

int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
//freopen("input.txt", "r", stdin);

int n, k;
cin >> n >> k;

vector<int> arr(n, 0);
vector<int> res;

char c;
for (int i = 0; i < n; i++) {
cin >> c;
arr[i] = c - '0';
}

stack<int> s;
int t = k;
for (int i = 0; i < n; i++) {
while(!s.empty() && t > 0 && arr[i] > s.top()) {
s.pop();
t--;
}
s.push(arr[i]);
}
while(t > 0){
t--;
s.pop();
}
while(!s.empty()){
res.push_back(s.top());
s.pop();
}
for (int i = res.size()-1; i >= 0; i--) {
cout << res[i];
}
return 0;
}

0 comments on commit ecb918c

Please sign in to comment.