[프로그래머스#JS] 큰 수 만들기

dongwon·2021년 5월 2일
0

프로그래머스-Level 2

목록 보기
10/33

문제

큰 수 만들기 https://programmers.co.kr/learn/courses/30/lessons/42883

해결

  1. 순열을 이용해 모든 경우의 수 구하면 시간초과. (O^2)
  2. 각 자리 수를 랜덤으로 섞어 큰 수를 구하는게 아니라 순서가 있는 상태에서 숫자를 뽑아 큰 수를 만드는 것.
    이 때 큰수를 만드려면 최대한 앞자리 수가 커야하므로, 검색하려는 수와 stack의 마지막 자리 수를 비교했을 때, k가 0보다 클 때 최대한 제거하고 작다면 push 해줍니다.
  3. k가 남아있을 경우. ex) '9999' or '1010'의 경우 뒤에서 k번째 수 에서 k만큼 빼면 됩니다.

코드

function solution(number, k) {
  number = number.split("");
  const stack = [];

  for (let i = 0; i < number.length; i++) {
    const target = number[i];

    while (k > 0 && stack[stack.length - 1] < target) {
      stack.pop();
      k--;
    }

    stack.push(target);
  }

  stack.splice(stack.length - k, k);
  const answer = stack.join("");

  return answer;
}

const number = "9999";
const k = 2;
solution(number, k);
profile
데이원컴퍼니 프론트엔드 개발자입니다.

0개의 댓글