-
[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반응형'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 카펫 (0) 2022.12.30 [C++] 프로그래머스 섬 연결하기 (0) 2022.12.28 [C++] 프로그래머스 베스트앨범 (0) 2022.12.26 프로그래머스 부대복귀 c++ (0) 2022.12.23 프로그래머스 수식 최대화 c++ (0) 2022.12.21