๋ฌธ์ ์ดํด๋ณด๊ธฐ
๋ฌธ์ ๋ฅผ ์ฝ์ด๋ณด๋ฉด ๊ต์ฅํ ๊ฐ๋จํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋จผ์ ๋ ๋ค.
10์ง์๋ฅผ k์ง์๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋๋์
์ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ๊ตฌํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ ์กฐ๊ฑด๋ ์ผํ ๋ณด๋ฉด ๋ณต์กํด ๋ณด์ด์ง๋ง ์กฐ๊ธ๋ง ๋ ์๊ฐํด๋ณด๋ฉด ๊ทธ๋ฅ 0์ผ๋ก splitํ๋ฉด ํด๊ฒฐ๋ ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
- 0P0์ฒ๋ผ ์์ ์์ชฝ์ 0์ด ์๋ ๊ฒฝ์ฐ
- P0์ฒ๋ผ ์์ ์ค๋ฅธ์ชฝ์๋ง 0์ด ์๊ณ ์ผ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- 0P์ฒ๋ผ ์์ ์ผ์ชฝ์๋ง 0์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- P์ฒ๋ผ ์์ ์์ชฝ์ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- ๋จ, P๋ ๊ฐ ์๋ฆฟ์์ 0์ ํฌํจํ์ง ์๋ ์์์ ๋๋ค.
๊ตฌํํ๊ธฐ
๊ตฌํ ๊ณผ์ ์ Step์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Step 1. 10์ง์๋ฅผ k์ง์๋ก ๋ณํํ๊ธฐ
Step 2. ๋ณํ๋ k์ง์๋ฅผ 0์ผ๋ก splitํ๊ธฐ
Step 3. split๋ ๋ฐฐ์ด์ ์ ์ค์์ ์์์ธ ๊ฒ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ
์์ Step์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํด์ผ ํ ํจ์๋ฅผ ์๊ฐํด๋ณด๋ฉด
0์ง์๋ฅผ k์ง์๋ก ๋ณํํ๋ ํจ์, ์์๋ฅผ ๊ตฌํ๋ ํจ์ ์ด๋ ๊ฒ ๋ ๊ฐ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
10์ง์๋ฅผ k์ง์๋ก ๋ณํํ๋ ํจ์ ๊ตฌํํ๊ธฐ
10์ง์๋ฅผ 2์ง์๋ก ๋ณํํ๋ ๊ณผ์ ์ ์๊ฐํด๋ณด์.
์๋ ๊ทธ๋ฆผ์ฒ๋ผ 10์ง์์ธ 19๊ฐ ์๊ณ , ์ด๋ฅผ 2์ง์๋ก ๋ณํํ๋ค๊ณ ํ ๋
19๋ฅผ ๊ธฐ์์ธ 2๋ก ๊ณ์ ๋๋ ํ ๋๋จธ์ง ๊ฐ์ ๊ฑฐ๊พธ๋ก ์ฝ์ผ๋ฉด ๋ณํ๋ 2์ง์ ๊ฐ์ด ๋์จ๋ค.
์ด ๊ณผ์ ์ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
const convert = (n,k) =>{
const res = [];
while (n){
res.push(n%k);
n /= k;
n = Math.floor(n);
}
return res.reverse().join('');
}๋๋จธ์ง๋ฅผ ์ ์ฅํ Array๋ฅผ ์์ฑํ๋ค.
๊ทธ ๋ค์ 10์ง์์ธ n์ด 0์ด ์๋ ๋ ๊น์ง while๋ฌธ์ ๋๋ฉด์ n์ ๊ธฐ์์ธ k๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐฐ์ด์ ๋ฃ๊ณ , n๊ฐ์ n์ k๋ก ๋๋ ๋ชซ์ผ๋ก ์
๋ฐ์ดํธ ํด์ค๋ค.
๋๋จธ์ง๋ฅผ ๊ฑฐ๊พธ๋ก ์ฝ์ด์ผ ๋ณํ๋ ์ง์๊ฐ ๋๊ธฐ ๋๋ฌธ์ res ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ reverse๋ฅผ ํตํด ๋ค์ง๊ณ join์ ํตํด ์ฐ๊ฒฐํ ํ ๋ฆฌํดํด์ฃผ์๋ค.
์์๋ฅผ ๊ตฌํ๋ ํจ์ ๊ตฌํํ๊ธฐ
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ์๋จ!!
๋์ ์ฒซ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ก ์์ ํจ์๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด์๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ 1๋ฒ์ด๋ 11๋ฒ์์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
MDN - Array: length
์ ์ดํด๋ณด๋ฉด javascript์ ๋ฐฐ์ด์ ์ต๋ ๊ธธ์ด๊ฐ 4294967296(2^32)์ธ ๊ฒ์ ์ ์ ์๋ค.
๋ง์ฝ (n,k) = (824225, 3)์ด๋ผ๋ฉด ๋ณํ๋ 3์ง์๋ 1112212121212์ด ๋๊ณ , ์ด๋ ๋ฐฐ์ด์ ์ต๋ ์ฌ์ด์ฆ๋ณด๋ค ํฐ ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์๋ฅผ ๊ตฌํด์ค์ผ ํ๋ค.
์ ๊ณฑ๊ทผ ๋ฐฉ๋ฒ์ผ๋ก ์์ ๊ตฌํ๊ธฐ
์ด๋ค ์ N์ ์ฝ์๋ค์ sqrt(N) ๊ธฐ์ ์ผ๋ก ๋์นญ์ ์ด๋ฃจ๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ํ๋ณํ ๋๋ N์ ์ ๊ณฑ๊ทผ ๊น์ง๋ง ๋ณด๋ฉด ๋๋ค.
์์๋ฅผ ๋ค์ด ์ค๋ช
ํ์๋ฉด, N = 12 ์ผ ๋ ์ฝ์๋ 1, 2, 3, 4, 6, 12 ๊ฐ ๋๋ค.
์ฌ๊ธฐ์ sqrt(N) = sqrt(12) = 3.X๊ฐ ๋๋ค.
12๋ฅผ ๋ ์ฝ์์ ๊ณฑ์ผ๋ก ํํํ ๋ ์ ๊ณฑ๊ทผ์ธ 4.X๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์นญ์ด ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
1 * 12
2 * 6
3 * 4
4.x
4 * 3
6 * 2
12 * 1 ์ด๋ฅผ ํตํด N์ด N์ ์ ๊ณฑ๊ทผ๋ณด๋ค ํฐ ์๋ก ๋๋์ด ๋จ์ด์ง๋ค๋ฉด, N์ ์ ๊ณฑ๊ทผ๋ณด๋ค ์์ ์๋ก ๋ฌด์กฐ๊ฑด ๋๋์ด ๋จ์ด์ง๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์ N์ ์ ๊ณฑ๊ทผ๊น์ง๋ง ๋๋์ด๋ณด๋ ๊ฒ์ผ๋ก ์์ ์ฌ๋ถ๋ฅผ ํ๋ณํ ์ ์๋ค.
์ด ์ด๋ก ์ ์ ์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
const isPrime = (num) => {
if(num <= 1) return 0;
for (let i = 2; i<=Math.sqrt(num); i++){
if(num % i === 0){
return 0;
}
}
return 1;
}์ ์ฒด ์ฝ๋
const convert = (n,k) =>{
const res = [];
while (n){
res.push(n%k);
n /= k;
n = Math.floor(n);
}
return res.reverse().join('');
}
const isPrime = (num) => {
if(num <= 1) return 0;
for (let i = 2; i<=Math.sqrt(num); i++){
if(num % i === 0){
return 0;
}
}
return 1;
}
function solution(n, k) {
return convert(n,k).split('0').reduce((acc,cur)=>acc+isPrime(+cur),0);
}๋ฌธ์ ํ๊ธฐ
๊ฐ๋จํ ๋ฌธ์ ์์ง๋ง ์์ ํ๋ณ ํจ์๋ฅผ ๊ตฌํํ๋ ๊ณณ์์ ์ด๋ ค์์ด ์์๋ค.
๊ทธ๋๋ ์ด ๋ฌธ์ ๋๋ถ์ ์ ๊ณฑ๊ทผ์ ํตํด ์์๋ฅผ ํ๋ณํ ์ ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์ด ์ ์ตํ๋ค.