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

hhkim·2023년 10월 9일
0

Algorithm - JavaScript

목록 보기
155/188
post-thumbnail

풀이 과정

  1. 결과 배열에 만들 문자열 길이만큼 담길 때까지 반복
  2. 현재 수가 결과 배열 마지막 요소보다 큰 경우
    1번 배열 길이 + 남은 문자열 길이가 만들어야 하는 문자열 길이보다 길고, 마지막 요소가 현재 요소보다 작은 동안 결과 배열 마지막 요소 pop
  3. 현재 요소 push

코드

function solution(number, k) {
  const arr = [];
  const orgLen = number.length;
  const resultLen = orgLen - k;
  for (let i = 0; i < orgLen; ++i) {
    const [curr, last, restLen] = [number[i], arr.at(-1), orgLen - i];
    if (last && curr > last) {
      while (
        arr.length &&
        arr.length + restLen > resultLen &&
        arr.at(-1) < curr
      )
        arr.pop();
    }
    arr.push(curr);
  }
  return arr.join('').slice(0, resultLen);
}

🦾

코드가 좀 지저분하긴 한데 혼자 힘으로 해냈다!
스택을 사용해서 바로 앞의 수와 현재 수를 비교하고, 남은 요소의 수를 가지고 스택의 수들을 제거할지 여부를 결정한다.
"11" 1 "1""54321" 4 "5" 같이 뒤에서 더 큰 수가 등장하지 않는 경우 모든 수를 결과 배열에 담게 되므로 마지막에 slice()로 잘라준다.

0개의 댓글