๐Ÿ”’Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[JS] > ๊ฑฐ์Šค๋ฆ„๋ˆ

devWarrior 2024. 9. 6. 16:33

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฑฐ์Šค๋ฆ„๋ˆ

 

๐Ÿ”ฅ๋ฌธ์ œ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/12907

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ”ฅ์ฒซ๋ฒˆ์งธ ํ’€์ด ( ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ชจ๋‘ ํ†ต๊ณผ but ์‹œ๊ฐ„์ดˆ๊ณผ )

์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๋‹ค. ( ํ•˜๋‹จ ์ฐธ์กฐ ) 

์ด ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋ชจ๋‘ ํ†ต๊ณผ์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ ํ…Œ์ŠคํŠธ์—์„œ ๋ชจ๋‘ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค๐Ÿ˜ญ 

๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๋‹ˆ ์žฌ๊ท€๊ฐ€ ์•„๋‹Œ dp ( dynamic programming : ์ตœ์ ํ™” ) ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

function solution(n, money) {
    let answer = 0;
    money.sort((a,b)=>a-b)    
    const recursive =(rest,arr)=>{
        if(arr.length===0 || rest <=0){
            return
        }
        let fixed = arr.shift()
        if(fixed>rest){
            return
        }
        let count = 0;
        while(1){ 
            if((rest-fixed*count)>0){
                let newArr = [...arr]
                recursive(rest-fixed*count,newArr)
            }else if((rest-fixed*count)===0){
                ++answer
                return
            }else{
                return
            }    
            ++count
        }
    }
    let sliced = money.slice(1)
    let fixed = money[0]
    recursive(n,money)
    

    return answer%1000000007;
}

 

 

๐Ÿ”ฅ๋‘๋ฒˆ์งธ ํ’€์ด ( ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด ์ฐธ๊ณ )

์ฒซ๋ฒˆ์งธ ํ’€์ด์— ๋น„ํ•ด newArr = [...arr]์™€ ๊ฐ™์ด ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•  ํ•„์š”๋„ ์—†๊ณ  sort()ํ•  ํ•„์š”๋„ ์—†๊ณ  ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๋„ ์—†์–ด ๊ณ„์‚ฐํšŸ์ˆ˜๊ฐ€ ํ™•์‹คํžˆ ์ค„์–ด๋“ ๋‹ค. 

 

dp[n] ์€ n์„ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์—ฐ์‚ฐ๊ณผ์ •์„ ๊ณฑ์”น์–ด ๋ณด์ž! 

function solution(n, moneyList) {

    
    let dp = Array(n+1).fill(0)
    dp[0]=1
    
     for(const money of moneyList){
         for(let i=money; i<n+1; ++i){
             dp[i] = dp[i] + dp[i-money]
         }
         
     }
    
    return dp[n]%1000000007
    
}

 

 

๐Ÿ”ฅ์ฐธ๊ณ 

https://velog.io/@pmthk__/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B1%B0%EC%8A%A4%EB%A6%84%EB%8F%88-Lv.3-JS

 

๊ฑฐ์Šค๋ฆ„๋ˆ | Lv.3 | JS

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต, ๊ฑฐ์Šค๋ฆ„๋ˆ, Lv.3, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, DP

velog.io