코딩테스트 연습/programmers

[Programmers]탐욕법 > 큰수만들기

수기 2022. 1. 22. 03:31

1. 앞자리수부터 오른쪽 수보다 왼쪽수가 더 작으면 지운다.

2. 1번을 다 실행했음에도 지워진 수가 없으면(기존 n_size와 number.size가 같다면) number중에서 제일작은 수부터 하나씩 제거한다.

 


main포함 코드(c++)

#include <string>
#include <vector>

using namespace std;

string solution(string number, int k) {
    
    int n_size = number.size();
    for(int i=0;i<number.size();i++){
        if( n_size == number.size()+k) break;
        if(number[i] < number[i+1]) { number.erase(number.begin()+i); i=-1; }
    }
    
    if(n_size == number.size()){
        for(int i=0;i<number.size();i++){
            if( n_size == number.size()+k) break;
            number.erase(min_element(number.begin(), number.end()));
            i=-1;
        }
    }
    
    return number;
}


int main() {

    string number = "99991";
    int k = 3;
    solution(number, k);
}

 

 


사용한 테스트케이스

"7777" , 1 / 777

"99991", 3 / 99