# [일일코딩][그리디] 큰 수 만들기

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

# 문제

어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.



#### 제한사항
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. - k는 1 이상 number의 자릿수 미만인 자연수입니다.

# 입출력 예

입출력 예

number k return
"1924" 2 "94"
"1231234" 3 "3234"
"4177252841" 4 "775841"

# 내 풀이

function solution(number, k) {
  const arr = [];

  for (const num of number) {
    while (k > 0 && arr[arr.length - 1] < num) {
      arr.pop();
      k--;
    }
    arr.push(num);
  }

  arr.splice(arr.length - k, k);

  return arr.join("");
}

# [풀이]

  1. number 를 앞에서부터 순회한다.
  2. 스택에 순서대로 쌓는다.
  3. 만약 스택의 마지막 요소가 현재 순회하고 있는 숫자보다 작고, 제거한 숫자의 개수가 0보다 크다면 스택의 마지막 요소를 스택에서 빼고, 제거해야 하는 개수 k를 1씩 뺀다. 이 과정을 스택의 마지막 요소가 현재 숫자보다 큰 경우까지 반복한다.


# 리뷰

오랜만에 문제를 푸니 머리가 다 굳었다..꾸준히 풀어야겠다...
그리디 문제라서 정렬로 접근을 했었다. 그런데 문제를 풀다보니. 정렬이 아닌 순회를 해야한다고 판단이 되었다.
앞에서부터 순회를 하며 다음 숫자가 스태의 마지막 값보다 크면 있는 숫자를 빼고 현재 숫자를 넣는 식으로 접근하였다.