알고리즘/프로그래머스
[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
반응형