Problem Solving/Programmers

[프로그래머스 / JS] 큰 수 만들기 - Level 2

애송이개발자 2023. 3. 22. 11:02

 

🚩 문제 주소

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

 

 

📄 접근 방법

 

그리디

 

더보기
  1. stack 배열을 빈배열로 생성합니다.

  2. number 배열을 for...of문으로 순회합니다.

  3. k가 0보다 크고 stack배열의 끝 원소가 현재 탐색한 number배열의 원소보다 작다면
    stack배열에서 원소를 pop 합니다. ( 큰 숫자를 만들어야 하기 때문에)
    숫자를 제거 했으므로 k도 1 감소시켜줍니다.
    조건을 만족하지 않는다면 크거나 같다는 것이기 때문에, 숫자를 push합니다.

  4. 이 부분은 엣지 케이스인데, number 배열을 전부 순회했는데 k가 남는 경우도 있습니다.
    따라서 숫자들이 모아진 stack 배열의 뒤에서 부터 k만큼 지워줍니다.
    ex) number: "987", k: 1일 때 정답은 "98"이 나와야하지만, 이 과정이 없다면 "987"이 나옵니다.
  5. stack배열을 join한 뒤 반환합니다.

    

 

 

👨‍💻 나의 코드

function solution(number, k) {
    const stack = [];
    // k가 0보다 크고 stack의 끝이 number[i]보다 작다면
    // stack pop, k--
    // stack.push(number[i])
    for (const value of number) {
        while (k > 0 && stack.at(-1) < value) {
            stack.pop();
            k--;
        }
        stack.push(value);
    }
    // number를 다 반복했는데 k가 남은경우
    // 뒤에서 k만큼 잘라줘야함
    stack.splice(stack.length-k, k);
    return stack.join('');
}