알고리즘/프로그래머스

[C++] 프로그래머스 큰 수 만들기

이영재의오른발 2022. 12. 27. 19:58
반응형
#include <string>
#include <vector>

using namespace std;

bool allCheck(string number) {
    bool check = false;
    for(int i=1; i<number.length(); i++) {
        if(number[i] > number[i-1]) {
            check = true;
        }
    }
    return check;
}

string solution(string number, int k) {
    string answer = "";
    
    while(k!=0) {
        if(!allCheck(number)) {
            for(int i=0; i<k; i++) {
                int size = number.length()-1;
                number.erase(number.begin() + size);
            }
            break;
        }
        for(int i=1; i<number.length(); i++) {
            if(number[i] > number[i-1]) {
                number.erase(number.begin()+i-1);
                k--;
                break;
            }
        }
    }
    
    
    answer = number;
    
    return answer;
}

 

 

  • 알고리즘 

맨 앞자리 수 부터  탐색하며 앞자리 수 보다 큰 수가 뒷자리에 있을 경우 계속 제거 해준다.

 

 

  • 앞자리 수 보다 큰 수가 뒷자리에 없으면서 제거한 숫자들의 수가 k 미만일 경우 
bool allCheck(string number) {
    bool check = false;
    for(int i=1; i<number.length(); i++) {
        if(number[i] > number[i-1]) {
            check = true;
        }
    }
    return check;
}

allCheck 메소드를 사용해 검증한 뒤

if(!allCheck(number)) {
            for(int i=0; i<k; i++) {
                int size = number.length()-1;
                number.erase(number.begin() + size);
            }
            break;
        }

남은 제거할 수 있는 숫자 만큼을 뒤에서부터 지워주면 된다.

 

 

위와같은 작업을 하지 않는다면 12번 테스트케이스에서 실패할 수 있기 때문에 꼭 해줘야한다.

728x90
반응형