프로그래머스 LEVEL 2(큰 수 만들기)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-24

  • 해결 방법 :
    • stack을 통해 숫자의 대소를 비교
    • 현재 인덱스의 값이 이전 인덱스의 값(stack의 top)보다 크고, 지워야할 k개의 수가 남아 있는 동안 stack의 최상단 pop() 및 count 증가
    • stack의 현재 인덱스 값 push()
    • 반복문 종료 후 count의 수가 k와 같지 않다면(계속해서 현재 인덱스의 값이 이전 인덱스의 값보다 작거나 같은 경우) 같을때 까지 stack의 최상단 pop()
  • 회고 :
    • 처음에 문자열로 풀려고 했는데 지워야할 숫자가 나올때 마다 인덱스가 달라져서 어려웠다.
    • 지우는 경우보다 추가하는 경우가 편하다면 stack()을 애용하자..
  • 코드

    function solution(number, k) {
        let count = 0;
        const stack = [number[0]];
            
        for (let i = 1; i < number.length; i++) {
            const current = number[i];
            while (count < k && stack[stack.length - 1] < current) {
                stack.pop();
                count++;
            }
            stack.push(current);
        }
            
        while (count !== k) {
            stack.pop();
            count++;
        }
            
        return stack.join('');
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges