1924
일 때,14
는 가능할 지언정, 41
은 불가능함주어진 수 그대로
유지해야됨주어진 수 그대로
라는 조건에서 추가적으로 다른 조건이 생김number = "1231234"
length = 7
K = 3
만들어야되는 숫자 = 4[Length - 3]
이 경우, 맨 뒤 3자리의 "234"는 고를 수 없음
-> 234 중 하나를 고르면, 숫자 4개를 만들 수 없음
-> 주어진 수 그대로 수열을 유지해야되기 때문에 "234" 중 2를 선택하면 234 라는 답이 나오지만, 만들어야 되는 숫자가 4이므로 모순[불가능]
number = 인풋 숫자[String], k = 제거할 수의 갯수, answer = 답[String]
target
변수 초기화number.length() - k
tmp
-> target - 1
target-1
만큼은 선택할 수 없습니다.[핵심 참고]1231234
에서 3이 큰 수이고, 인덱스가 2인 경우[0부터 시작]1234
가 됨맨 처음 짠 코드, 인덱스와 큰 수 모두 손으로 구한 격
#include <string>
#include <vector>
#include <iostream>
#include <climits>
using namespace std;
string solution(string number, int k) {
string answer = "";
int target = number.length() - k;
while (number.length() > 1) {
int tmp = target - 1; // target - 1 choice not possible
int limit = number.length() - tmp;
int maximum_index = INT_MIN;
char maximum_number = CHAR_MIN;
for (int i = 0; i < limit; i++) {
if (maximum_number < number[i]) {
maximum_number = number[i];
maximum_index = i;
}
}
answer += maximum_number;
number = number.substr(maximum_index+1, number.length());
target--;
}
if (target != 0) {
answer += number;
}
return answer;
}
이 편한 max_element.. 코드 양이 팍 줄었습니다...
#include <string>
#include <vector>
#include <iostream>
#include <climits>
#include <algorithm>
using namespace std;
string solution(string number, int k) {
string answer = "";
int target = number.length() - k;
while (number.length() > 1) {
int tmp = target - 1; // target - 1 choice not possible
int limit = number.length() - tmp;
auto iter = max_element(number.begin(), number.begin()+limit);
answer += *iter;
number.erase(number.begin(), iter+1);
target--;
}
if (target != 0) {
answer += number;
}
return answer;
}