ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
    반응형

    댓글

Designed by Tistory.