프로그래머스 #JavaScript - 큰 수 만들기

SSO·2020년 1월 30일
0

프로그래머스 Lv2

목록 보기
12/46

문제

https://programmers.co.kr/learn/courses/30/lessons/42883

풀이

  1. 참고.
function solution(number, k) {
    var stack = []; // b : 최종 글자들이 저장될 스택 (숫자가 큰!)
    for (var i = 0; i < number.length; i++) { // 모든 숫자 비교
        var now = number[i]; // 현재 인덱스 숫자. 처음에는 그냥 push

        // 무조건 push 하고 다음 for 문에서 이전인덱스 숫자와 나랑 비교해서 현재인덱스가 이전인덱스보다 크면 pop하고 넣어줌. 제거하는 숫자인 (k)를 1 감소
        // 제거할 숫자를 다 채웠으면 그냥 넣음
        while (k > 0 && stack[stack.length - 1] < now) {
            stack.pop();
            k--;
        }
        stack.push(now);
    }
    // k가 0일 경우 스택은 그대로,
    // but k가 남아있으면 뒤에서부터 제거해준다. (ex. 1010,2 -> 11)
    stack.splice(stack.length - k, k);
    var answer = stack.join('');

    return answer;
}

1. 실패한 코드  - test 10번 틀림
- 다른 질문들 참고한 결과, 코드의 효율성이 매우 낮음...

```javascript

function solution(number, k) {
    var answer = 0;
    var answerArr = [];
    var length = number.length;  
    var arr = number.split('');
    var newArr = arr.map(num => parseInt(num));

    // Find first number and Index
    // string, number check 
    var max = Math.max(...newArr.slice(0, k+1));

    var index = newArr.indexOf(max);
    var remain = k - index; //remain possible number to remove
  
    
    // Remove remain from subArr
    answerArr.push(max);
    var subArr = newArr.slice(index+1, length);

    
    for(var i=0; i<subArr.length; i++){
        var compare = subArr.slice(i+1, i+remain+1)

        if(compare.some(num => subArr[i] < num)){
            remain = remain - 1;
            subArr.splice(i,1);
          	i = i-1;
            if(remain === 0) {
                break;
            }
        } 
    }
    
  
  while(remain !== 0){
    subArr.pop();
    remain = remain-1;
  }
   const finalArr = answerArr.concat(subArr);

    // answer should be string
  answer = finalArr.join('');
  return answer;
}

더 생각해보기

코딩을 시작하기 전에 알고리즘을 정확하게 도식화하고 단순화할 수 있어야 한다!
-> 알고리즘 자체가 너무 복잡.. -> max 구하는 과정이 불필요..
arr.findIndex() vs arr.indexof()
arr.splice() vs arr.slice()
arr.concat()
arr.join()

큰 숫자 -> 자릿수와 관련있다

참고사항

#탐욕법
#stack

profile
happy

0개의 댓글