코딩테스트 준비/프로그래머스

[프로그래머스 LV2] - 큰 수 만들기(그리디) c++

SeoburiFaust 2024. 2. 25. 16:57

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42883#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근방법

..

코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

//k가 1000000이고 number가 1000000이면,
//시간 내에 불가능. -> 중첩 불가
//만약 k가 4라면,
//처음 올 숫자는 앞에서 5개 중에 가장 큰 수.
//두 번 째로 올 숫자는 앞에서 선택된 숫자 자르고 나서
//남은 k+1개 중 가장 큰 수.
string solution(string number, int k) {
    string answer = "";
    vector<int> num;
    for (auto n : number) {
        num.push_back(n - '0');
    }
    for (int i=0;i<num.size() - k;i++) {
        int big = -1;
        int idx;
        for (int j=i;j<i+k+1;j++) {
            if (big < num[j]) {
                idx = j;
                big = num[j];
            }
        }
        answer += to_string(num[idx]);
        k = k - (idx - i);        //빼버린만큼 k감소
        i = idx;
    }
    return answer;
}

개선할 점

대견한 나 자신.