포스트

[ 프로그래머스 ] 큰 수 만들기

문제


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

풀이


어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하기 위해 탐욕법을 사용하여 풀이한다. 숫자 제거 후 남은 숫자들의 순서대로 가장 큰 숫자가 정해지므로, 앞자리를 큰 수로 유지하기 위해 k-1 개 이상의 숫자를 뒤에 가지고 있는 가장 큰 숫자를 탐색하고 뒷자리도 이와 같이 반복하여 앞자리를 최대로 할 수 있는 경우의 수를 탐색한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string number, int k) 
{
    string answer = "";

    int idx = -1;

    for (int i = 0; i < number.size() - k; i++)
    {
        char max_num = '0';
        
        for (int j = idx + 1; j <= k + i; j++)
        {
            if (max_num < number[j])
            {
                max_num = number[j];
                idx = j;
            }
        }

        answer += max_num;
    }


    return answer;
}

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.