https://programmers.co.kr/learn/courses/30/lessons/42883?language=cpp
해당 문제는 Greedy 문제로 접근 방법은 각 숫자 범위 중 가장 큰 숫자를 추려내면 된다.
i 번째 숫자 삽입 시에 지정지을 수 있는 범위는 i ~ k+i 이다.
#include <string>
#include <vector>
using namespace std;
string solution(string number, int k) {
string answer = "";
int bound = number.size()-k; // 경계선
int idx = -1; // 가장 최근 고른 idx
// bound 개의 숫자를 만들 때 까지
for(int i=0; i<bound;i++){
char mch = '0';
// 비교할 수 있는 범위 지정
for(int j=idx+1; j <= k+i; j++){
if(mch < number[j]){
mch = number[j];
idx = j; // idx 갱신
}
}
answer.push_back(mch);
}
return answer;
}
'Archived(CSE Programming) > 알고리즘(C++)' 카테고리의 다른 글
프로그래머스_카펫 (0) | 2019.11.18 |
---|---|
프로그래머스_구명보트 (0) | 2019.11.18 |
프로그래머스_소수찾기 (0) | 2019.11.18 |
프로그래머스_이중우선순위큐 (0) | 2019.11.18 |
프로그래머스_등굣길 (0) | 2019.11.18 |