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

이서현·2021년 7월 28일
0

Algorithm

목록 보기
51/76
post-thumbnail

07.28에 푼 문제입니당🌷
큰 수 만들기

첫번째 풀이

function solution(number, k) {
    var answer = '';
    const numlist = []
    let temp = [...number]
    let count = number.length - k
    temp.map(num=>numlist.push(parseInt(num)))
    temp=numlist.slice().sort()
    let slicenum= []

    //1 가능한 숫자열 자르기
    while(slicenum.length<count){
        let max = temp.pop()
        let index = numlist.indexOf(max)
        slicenum=numlist.slice(index)
    }
    //2 숫자열 안 숫자 삭제
    while(slicenum.length!==count){
        for(let i =0;i<slicenum.length-1;i++){
            if(slicenum[i]<slicenum[i+1]){
                slicenum.splice(i,1)
                break
            }
        }
    }
    slicenum.map(num=>answer+=String(num))
    return answer;
}


아이패드를 집에 두고와서,, 종이에 끄적였담,,,,😂
이 풀이법은 10,12번 시간초과로 통과하지 못했다.

두번째 풀이

function solution(number, k) {
    var answer = '';
    const numbers = [...number]
    const stack = []
    let count = 0
    for(let i = 0;i<numbers.length;i++){
        let num = parseInt(numbers[i])
        while(num>stack[stack.length-1]&&stack.length!==0&&count<k){
            stack.pop()
            count++
        }
        stack.push(num)
    }
    if(count===0) stack.pop()
    stack.map(num=>answer+=String(num))
    return answer;
}

두번째 풀이법!
stack을 이용한다.
stack에 차례로 값을 입력한다. 바로 앞에 있는 숫자가 더 작으면 작은 숫자를 pop 하고 입력받은 숫자보다 큰 숫자가 앞에 오도록 진행한다.
삭제한 숫자 값이 k개가 되면 끝난다!

  • 예외처리
    number = "1000" k=1 인 경우,
    for문에서 숫자가 삭제되지 않는다.
    stack에 1, 0, 0, 0으로 쌓인다. 지워진 숫자의 개수가 0인 경우 가장 끝 숫자가 제일 작은 숫자이므로 pop한다.

결과는 모두 성공이다! 확실히 시간도 줄었다.🔥🔥

profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글