๐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;
}