PS/그리디 알고리즘[Greedy]

백준 2812 크게 만들기

SeungbeomKim 2022. 6. 30. 22:06

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

 

2812번: 크게 만들기

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

www.acmicpc.net

<코드>

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool check;
int main()
{
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	int n, k;
	cin>>n>>k;
	vector<char>v; //기존 입력 값 숫자
	vector<char>v2;//변경된 결과 값 숫자
	string num; 
	cin>>num;
	for(int i=0;i<n;i++){
		v.push_back(num[i]);
	}
	int i=0;
	for(i=0;i<num.size();i++){
		while(k && !v2.empty() && v2.back()<v[i]){
			v2.pop_back();
			k--;
		} // 숫자 k개 제거 및 조건문(벡터 v2의 뒷 부분이 v[i]보다 작다면 pop해주고 큰 수를 넣어줘야 된다)
		v2.push_back(v[i]);
	}
	while(k--){
		v2.pop_back(); // 숫자 k개를 제거하지 못했다면, pop해준다(ex)1111과 같은 중복된 수를 고려)
	}
	for(int i=0;i<v2.size();i++)
	{
		cout<<v2[i];
	}
}

<풀이과정>

이 문제의 핵심은 숫자 문자열의 순서는 그대로여야 하며,  기존 벡터(입력)와 새로운 벡터(결과)의 비교를 통해 큰 수를 만드는 것이 핵심이다. 

'PS > 그리디 알고리즘[Greedy]' 카테고리의 다른 글

백준 19941 햄버거 분배  (0) 2022.07.03
백준 1449 수리공 항승  (0) 2022.07.01
백준 18310 안테나  (0) 2022.06.30
백준 2012 등수매기기  (0) 2022.06.30
백준 9009 피보나치  (0) 2022.06.29