[프로그래머스] 큰 수 만들기 (탐욕법 greedy)

쿼카쿼카·2023년 4월 7일
0

알고리즘

목록 보기
50/67

문제

코드

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

시간초과

  • number의 범위를 보면 100만원이다. 내 노트북 두 대값
  • 이 말은 이중으로 O(n^2)나오는 순간 시간초과라는 것(물론 전 이렇게 풀고 시간초과ㅎㅎ)

탐욕법

  • 앞에서부터 한 자리씩 보면서 ans라는 스택에 넣어줘요
  • 앞자리일 수록 커야대니까 k를 다 사용하더라도 앞을 큰 수로 넣어줘야 해요
  • k가 남았고, 스택이 비어있지 않고, 현재 값이 스택의 마지막 값보다 크면 while문으로 계속 비교해요!
  • 마지막에 join 해주면 끝!
profile
쿼카에요

0개의 댓글