본문 바로가기
개발/알고리즘

알고리즘 : 큰 수 구하기 프로그래머스 (자바스크립트)

by 안뇽! 2021. 10. 26.
반응형

내가 맨 처음에 작성했던 코드는 다음과 같다.

처음엔 반복문으로 쓰다가 , 이건 queue 같다 싶어서 queue를 이용했다.

그런데 하다보니 후입선출이 되는걸 보고 stack이란걸 깨달았다.

function solution(number, k) {
    //현재값보다 다음값이 크면 현재값을 제거해야함. 무조건 제거임
    if(k===0)return number
    let stack = [number[0]]
    let idx = 0;

        for(let i = 1;i<number.length;i++){

            if(number[i-1]<number[i]){
                stack.pop()
                k--;
            }
            stack.push(number[i])
            if(k===0) {
                idx = i;
                break;

            }
        }    
    if(k===0)
    stack=[...stack,...number.slice(idx+1)]

    return stack.join('')


}

하지만 number='4177252841' , k= 4 인 상황에서 계속 '4775841'이 나왔고,

앞의 4를 지우는 방법을 생각하지 못했다.

고민하다가 검색을 했는데 나와는 조금 다른 stack 었다.

function solution(number, k) {

    let answer = ''; 
    let count = 0; 
    let stack = []; 
    for(let i=0; i<number.length; i++){ 
        while(stack.length != 0){ 
        // 카운트가 끝났으면 루프를 빠져나온다. 
        if(count === k) break; 
        // 현재 스택에 있는 값이 비교하는 숫자보다 작다면 제거하고 카운트를 1 증가한다. 
        if(stack[stack.length-1] < number[i]){
            count++; 
            stack.pop(); 
        }else break; 
        } 
        // 스택이 비어있다면 다음 숫자를 넣는다. 

    stack.push(number[i]); 

    } 
    //substr(0,number.length-k)는 number='8888888'이어서 k가 그대로 내려왔을 경우이다.
    answer = stack.join("").substr(0, number.length-k);; 
    return answer; 
}

 

프로그래머스를 많이 풀어봐야겠다.

반응형