728x90
반응형

2812번: 크게 만들기
문제
https://www.acmicpc.net/problem/2812
2812번: 크게 만들기
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
N자리 숫자에서 숫자 K개를 지워 얻을 수 있는 가장 큰 수를 구하는 문제다. 결과는 N-K자리 숫자가 되는데 앞자리 수가 클수록 큰 수가 될 것은 자명하다. 차례로 순회하며 이번 수보다 앞에 있으면서 작은 수를 지우면 될 것이다. 만약 수를 더 지워야 하면 가장 끝자리 수를 지우면 된다. 스택을 사용해 해결할 수 있고 스택과 같은 형태이면서 값 접근이 용이한 벡터를 사용해 풀었다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, k;
string s;
cin >> n >> k >> s;
vector<int> v;
for (char i : s) {
while (!v.empty() && v.back() < i - '0' && k) {
v.pop_back();
k--;
}
v.push_back(i - '0');
}
while (k--)
v.pop_back();
for (int i : v)
cout << i;
cout << '\n';
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 11403 경로 찾기 (0) | 2023.02.25 |
---|---|
[백준 / BOJ] C++ 11404 플로이드 (0) | 2023.02.25 |
[백준 / BOJ] C++ 9019 DSLR (0) | 2023.02.24 |
[백준 / BOJ] C++ 2206 벽 부수고 이동하기 (0) | 2023.02.24 |
[백준 / BOJ] C++ 13913 숨바꼭질 4 (0) | 2023.02.24 |