๐Ÿ”’Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [JS] > ์†Œ์ˆ˜์ฐพ๊ธฐ

devWarrior 2024. 7. 7. 23:18

 

 

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

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

 

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

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

programmers.co.kr

 

 

๐Ÿ”ฅํ’€์ด

ํ•ต์‹ฌ์€ ์žฌ๊ท€์ ์œผ๋กœ ๋ชจ๋“  ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์™€ ์†Œ์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

์ฒ˜์Œ์— ์žฌ๊ท€์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์‹œ๊ฐ„์—์„œ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๊ณ  ์˜ค๋žœ๋งŒ์— ์žฌ๊ท€์  ๋ฐฉ๋ฒ•์„ ์ด์šฉํ–ˆ์–ด์„œ ์ฒ˜์Œ์—๋Š” ํ’€์ด๊ฐ€ ๋ฐ”๋กœ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜๋‹ค.

function solution(numbers) {

    let primeNumbers =[]

    // dfs (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์ •์˜ )
    const dfs =(picked,unpicked,selectCount)=>{
        if(selectCount===1){
            unpicked.forEach((n)=>{
                primeNumbers.push(Number([...picked,n].join('')))
            })
            return 
        }
        unpicked.forEach((n,i,origin)=>{
            let newPick = [...picked,n]
            let newUnpicked = [...origin]
            newUnpicked.splice(i,1)
            dfs(newPick,newUnpicked,selectCount-1)
        })
    }
    
    // ๊ธธ์ด๊ฐ€ 1 ~ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋งŒํผ์˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์ˆซ์ž๋ฅผ ๋„์ถœํ•จ
    let count = 1  
    while(count<=numbers.length){
        dfs([],[...numbers],count)
        ++count
    }
    
    //์ค‘๋ณต ์ œ๊ฑฐ 
    primeNumbers = new Set([...primeNumbers])

    //์†Œ์ˆ˜๋งŒ ์ฐพ๋Š”๋‹ค
    let answerArr = Array.from(primeNumbers).filter((n)=>{
        let isPrimeNumber = true
        
        for(let i=2; i<=Math.sqrt(n); ++i){
            if(n%i===0){
                isPrimeNumber = false
            }
        }
        
        return ( n === 1 || n===0 || !isPrimeNumber ) ? false : true
    })
    
    

    return answerArr.length;
}