본문 바로가기

Archived(CSE Programming)/알고리즘(C++)

프로그래머스_큰 수 만들기

https://programmers.co.kr/learn/courses/30/lessons/42883?language=cpp

 

코딩테스트 연습 - 큰 수 만들기 | 프로그래머스

 

programmers.co.kr

해당 문제는 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;
}