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

Namlulu·2022년 1월 27일
0

알고리즘

목록 보기
18/28
function solution(number, k) {
  let newNumber = number.split('').map((item) => Number(item));
  let counter = 0;
  let index = 0;

  while (counter < k) {
    if (newNumber[index] < newNumber[index + 1]) {
      newNumber.splice(index, 1, null);
      newNumber = newNumber.filter((item) => item !== null);
      index = 0;
      counter += 1;
    } else {
      index += 1;
    }
  }

  return newNumber.join('');
}

=> 1차시도 배열에 삭제 및 초기화 작업을 계속해서 시간 초과 발생

function solution(number, k) {
  let counter = 0;
  let index = 0;

  while (counter < k) {
    if (number[index] < number[index + 1]) {
      number = number.slice(0, index) + number.slice(index + 1);
      index = 0;
      counter += 1;
    } else {
      index += 1;
    }
  }

  return number;
}

=> 2차시도 문자열로 자료형 변경 후 수행해도 여전히 시간 초과 발생

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

=> 3차시도 주어진 문자열을 계속 변경하는 것 보다, 배열을 하나 선언해놓고 더하는 방식이 더 효율적이기에 통과

profile
Better then yesterday

0개의 댓글