[Programmers] 큰 수 만들기

bin1225·2023년 3월 6일
0

Algorithm

목록 보기
24/34

문제

코드

1번

#include <string>
#include <vector>

using namespace std;

string solution(string number, int k) {
    string answer = "";
    int cnt=0;
    for(int i=0; i<number.size();i++){
        char a = number[i];
        for(int j=i+1;j<i+1+k;j++){
           if(j>number.size()) break;
            char b = number[j];
            if(a<b){
                k--;
                number.erase(number.begin()+i);
                i--;
                break;
            }
        }   
        if(k<0) return number;
    }
    if(k>0){
        number.erase(number.size()-k,k);
    }
    return number;
}

2번

#include <string>
#include <vector>

using namespace std;

string solution(string number, int k) {
    string answer = "";
    int maxNum = 0;
    int idx = 0;
    
    for(int i=0; i<number.size(); i++){
        
        if(number[i]>maxNum){
            maxNum = number[i];
            idx = i;
            
        }
        
        if(i == k){
            answer+=maxNum;
            maxNum = 0;
            i = idx;
            k++;
        }
        
        
    }
    return answer;
}

풀이

1번코드는 내가 짰고, 2번은 다른 사람 풀이가 너무 간단하길래 참고했다. 다 짜여진 코드 보고 이해하는 능력도 많이 부족한 듯 하다.

첫번째는 i번째 기준으로 k번째 뒤에 있는 수까지 확인해서, 자기보다 큰 수가 있으면 i번째 수를 삭제하는 방식이다. 삭제하게 되면 인덱스가 조정되므로 i--로 맞춰주고, k의 수를 1개 줄여서 삭제 가능한 수의 개수를 조정해주었다.

두번째 코드는 처음부터 k번째까지 중 가장 큰 수를 찾아서 answer에 추가, 해당 수부터 다시 탐색을 시작한다.
이 코드는 만약 maxNumindex를 기록해서 그 이전에 있는 수는 모두 날린다고 가정하고, 만약 횟수를 다 소진한 경우 남은 값들을 answer에 추가하기 위해 k++k값을 조정해준다..?
인덱스를 조정해서 자동으로 제거할 수의 개수를 컨트롤하는 게 너무 깔끔한데, 솔직히 아직 명확히 이해가 안된다... 나중에 다시 봐보도록 하기.

0개의 댓글