[JS] 큰 수 만들기

DARTZ·2023년 6월 27일
0

알고리즘

목록 보기
125/135

정답 코드

function solution(number, k) {
    const stack = [];
    
    for (let i = 0; i < number.length; i ++) {
        while (stack.length && k > 0 && stack.at(-1) < number[i]) {
            stack.pop();
            k--;
        } 
        stack.push(number[i]);
    }
    
    return stack.slice(0, stack.length - k).join("");
}

개인적으로 그리디 문제 유형에 약합니다. 그리디 문제 유형을 파악하는 연습을 해야할 것 같습니다. 이번 문제는 그리디로 풀 수 있는 문제였습니다.

문제를 푸는 아이디어는 다음과 같습니다.

  • number의 각 원소를 순회하면서
  • stack에 값이 존재하고 k가 0보다 크고 스택의 마지막 값이 현재 값보다 작으면 while문 실행
  • stack의 맨 마지막 값을 pop 한뒤에 k의 값을 -1 해준다.
  • 이렇게 되면 stack에는 최대 값이 저장

여기서 맨 마지막에 slice를 해주는 이유는 '4321' , 1일 때 처럼 숫자 값이 계속 작아지는 경우 stack에 계속 쌓이기만 합니다. 그래서 이런 경우일 때는 맨 마지막 숫자부터 k 만큼 값을 제거해주면 최대 값입니다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글