#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;
}
#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
에 추가, 해당 수부터 다시 탐색을 시작한다.
이 코드는 만약 maxNum
의 index
를 기록해서 그 이전에 있는 수는 모두 날린다고 가정하고, 만약 횟수를 다 소진한 경우 남은 값들을 answer에 추가하기 위해 k++
로 k
값을 조정해준다..?
인덱스를 조정해서 자동으로 제거할 수의 개수를 컨트롤하는 게 너무 깔끔한데, 솔직히 아직 명확히 이해가 안된다... 나중에 다시 봐보도록 하기.