Make Unreal REAL.
article thumbnail
Level 2. 큰 수 만들기

 

 

이미 k개만큼 제거했는데 뒤 숫자가 남았거나, answer가 비어있으면 삽입한다.

 

answer의 마지막 수보다 작은 수면 삽입하고, 큰 수면 그 수보다 크거나 같은 수가 나올 때까지 1개씩 제거하면서 answer에서 다시 뺀 후 삽입한다.

 

솔직히 미리 알고리즘을 생각하고 풀었다기보다는 그냥 조건에 맞춰 그때그때 추가하면서 풀었다.

 

#include <iostream>

using namespace std;

string solution(string number, int k)
{
    size_t len = number.length();
    string answer;

    for (int i = 0; i < len; ++i)
    {
        if (k == 0 || answer.empty() || answer.back() >= number[i])
        {
            if (i + k < len)
                answer.push_back(number[i]);
        }
        else
        {
            while (0 < k && !answer.empty() && answer.back() < number[i])
            {
                answer.pop_back();
                --k;
            }

            answer.push_back(number[i]);
        }
    }

    return answer;
}

 

다른 사람의 풀이다.

 

i가 k번째가 됐을 때(지금까지 훓어본 수 중에 하나를 선택해야 할 때), 이전 최댓값 이후부터 k번째 수 중 최댓값을 선택하는 방식이다.

 

그러면 앞에서부터 k번째까지의 수 중 최댓값을 선택해야 할 때 항상 가장 큰 수를 가져올 수 있게 된다.

 

#include <iostream>

using namespace std;

string solution(string number, int k)
{
    string answer;
    size_t len = number.length();
    char max = '\0';
    int maxIdx = 0;

    for (int i = 0; i < len; ++i)
    {
        if (max < number[i])
        {
            max = number[i];
            maxIdx = i;
        }

        if (i == k)
        {
            ++k;
            answer.push_back(max);

            i = maxIdx;
            max = '\0';
        }
    }

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 2. 추억 점수  (0) 2023.04.05
Level 2. 최솟값 만들기  (0) 2023.04.04
Level 2. 다음 큰 숫자  (0) 2023.04.02
Level 2. 숫자의 표현  (0) 2023.04.01
Level 2. 프린터  (0) 2023.03.31
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그