728x90
https://www.acmicpc.net/problem/2812
중요풀이
이 문제는 그리디 알고리즘을 활요한 문제입니다. 앞에서부터 순차적으로 보았을 때 다음 자리 숫자보다 현재 자리 숫자가 작다면 현재 자리 숫자를 제거해주는 식으로 루프를 진행해주고 이 과정이 끝나고도 K자리를 다 빼지 않았다면 남은 K의 숫자만큼의 자리를 뒤에서부터 빼주는 과정을 반복합니다.
소스코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, K, i = 0;
string num;
vector<char>v;
cin >> N >> K;
cin >> num;
while (i != num.size()) {
while (K != 0 && !v.empty() && v.back() < num[i]) {
v.pop_back();
K--;
}
v.push_back(num[i]);
i++;
}
//아직 못 빼준것이 있다면
while (K--)
v.pop_back();
for (int i = 0; i < v.size(); i++)
cout << v[i];
return 0;
}
728x90
'🥇Baekjoon Solutions > 그리디 알고리즘' 카테고리의 다른 글
[C++] 백준 8980번: 택배 (0) | 2021.08.23 |
---|---|
[C++] 백준 11000번: 강의실 배정 (0) | 2021.08.22 |
[C++] 백준 1202번: 보석 도둑 (0) | 2021.08.22 |
[C++] 그리디 알고리즘 예시 코딩 (0) | 2021.08.21 |
댓글