[programmers]大数の作成


問題の説明


ある数字からk個の数字を削除しようとしたときに得られる最大の数字を取得しようとします.
たとえば、2つの数字が1924から削除された場合、[19,12,14,14,92,94,24]を作成することができる.このうち最大の数字は94です.
解関数のパラメータとして文字列形式で与えられた数値と削除する数値kを用いる.solution関数を完了し、numberからk個の数値を削除したときに作成できる最大数値を文字列で返します.

せいげんじょうけん

  • は、1桁より大きく、100000桁未満の数字です.
  • kは、1または複数のビット数未満の自然数である.
  • ソースコード


    C++

    #include <string>
    #include <vector>
    
    using namespace std;
    
    string solution(string number, int k) {
        string answer = "";
        int index = -1;
        int n = number.length();
        for(int i=0;i<n-k;i++) {
            char max = 0;
            // 만들 수의 길이를 고려해
            // k+i번째까지 중 최댓값을 찾아 answer에 추가
            for(int j=index+1;j<=k+i;j++) {
                if(max<number[j]) {
                    index = j;
                    max = number[j];
                }
            }
            answer += max;
        }
        return answer;
    }

    java


    テスト10でタイムアウトエラーが発生し、StringBuilderに変更されました.
    class Solution {
        public String solution(String number, int k) {
            StringBuilder answer = new StringBuilder();
            int index = -1;
            int n = number.length();
            for(int i=0;i<n-k;i++) {
                char max = '0';
                for(int j=index+1;j<=k+i;j++) {
                    if(max<number.charAt(j)) {
                        index = j;
                        max = number.charAt(j);
                    }
                }
                answer.append(max);
            }
            return answer.toString();
        }
    }