42839. ์์ ์ฐพ๊ธฐ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ ์ฐพ๊ธฐ
๋ฌธ์ ์ ํ | ๋์ด๋ | ๊ฑธ๋ฆฐ ์๊ฐ | ํด๊ฒฐ ์ ๋ฌด(โ /โ) |
---|---|---|---|
์์ ํ์ | lv.2 | 2์๊ฐ | โ |
#
์ค๊ณ ๋ฐฉ๋ฒ๋ฌธ์์ด ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์์ด์ ์ฐพ๋ ํจ์๋ฅผ ์ด์ฉํ๋ค.
ex) ['0', '1', '1'] => [ '0', '1', '1', '01', '01', '10', '11', '10', '11', '011', '011', '101', '110', '101', '110' ]
๋ชจ๋ ์์ด์ Number ํจ์๋ก ์ซ์๋ก ๋ง๋ ๋ค. (์ด ๊ณผ์ ์์ ์์ 0์ด ์ฌ๋ผ์ง๋ค.)
๊ฐ ์ซ์๊ฐ ์์์ด๋ฉด ์์ Set์ ์ถ๊ฐํ๋ค. (์ด ๊ณผ์ ์์ ์ค๋ณต์ด ์ ๊ฑฐ๋๋ค.)
#
์ฝ๋function solution(numbers) { const primeNumbers = new Set();
for (let i = 1; i <= numbers.length; i++) { getPermutation(numbers.split(''), i) .map(Number) .forEach((number) => { if (isPrime(number)) { primeNumbers.add(number); } }); }
return primeNumbers.size;}
function getPermutation(arr, n) { if (n === 1) { return arr; }
return arr.reduce((perms, cur, idx) => { getPermutation( [...arr.slice(0, idx), ...arr.slice(idx + 1)], n - 1, ).forEach((perm) => { perms.push(cur + perm); });
return perms; }, []);}
function isPrime(num) { if (num < 2) return false; if (num === 2) return true; for (let i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) return false; } return true;}
#
์๊ฐ ๋ณต์ก๋- ์์ด : O(N!)
#
์ด๋ ค์ ๋ ์ ๋ชจ๋ ์์ด ์ฐพ๊ธฐ, ์์ ์ฐพ๊ธฐ, ์ค๋ณต ์ ๊ฑฐ, ์์ 0 ์ ๊ฑฐ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ ์ง ํฉ์ฑํ ์ง ๊ณ ๋ฏผ์ด ๊ธธ์ด์ก๋ค.
๋ชจ๋ ์์ด ์ฐพ๊ธฐ ํจ์๋ฅผ ์์ฑํ๋๋ฐ ์ด๋ ค์์ ๊ฒช์๋ค.
๋ชจ๋ ์์ด์ ๊ฒ์ํ๋ ๊ฒ๊น์ง ์๊ฐ ๋ณต์ก๋๋ฅผ ํ์ฉํ ๊ฒ์ธ์ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค.
- ์ ํ ์ฌํญ์ ๋ณด๊ณ ์ด๋ ์ ๋์ ์๊ฐ ๋ณต์ก๋๊ฐ ํต๊ณผํ ๊ฒ์ธ์ง๊ฐ ์์ธก ๊ฐ๋ฅํ์ง ๊ถ๊ธํ๋ค.
10์๋ฆฌ ์๊น์ง ํ ์คํธ ํด๋ณด์๋๋ฐ, ๋ฐ๋ณต๋ฌธ ์์์ ์ฌ๊ทํจ์๋ฅผ n ๊น์ด๋งํผ ๋ค์ด๊ฐ๋ค๊ฐ ๋น ์ ธ๋์์ ๊ทธ๋ฐ์ง stack overflow๋ ๋ฐ์ํ์ง ์์๋ค.
10์๋ฆฌ ์ ํ ์คํธ๊ฐ 8๋ถ ์ ๋ ๊ฑธ๋ ธ๋ค.