๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/92335
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
๋ฌธ์ ์ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- 0P0์ฒ๋ผ ์์ ์์ชฝ์ 0์ด ์๋ ๊ฒฝ์ฐ
- P0์ฒ๋ผ ์์ ์ค๋ฅธ์ชฝ์๋ง 0์ด ์๊ณ ์ผ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- 0P์ฒ๋ผ ์์ ์ผ์ชฝ์๋ง 0์ด ์๊ณ ์ค๋ฅธ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- P์ฒ๋ผ ์์ ์์ชฝ์ ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
- ๋จ, P๋ ๊ฐ ์๋ฆฟ์์ 0์ ํฌํจํ์ง ์๋ ์์์
๋๋ค.
- ์๋ฅผ ๋ค์ด, 101์ P๊ฐ ๋ ์ ์์ต๋๋ค.
๋จผ์ ์ฃผ์ด์ง ์ n์ k์ง๋ฒ์ผ๋ก ๋ณํํ๋ค.
๊ทธ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ซ์๋ค์ ์ถ๋ ค๋ด์ ์์์ธ์ง ์๋์ง ํ๋ณํ๋ค.
์ฆ ์กฐ๊ฑด๋ง์กฑ+์์ ์ธ ์ซ์๋ค์ ๊ฐฏ์๋ฅผ returnํ๋ ๋ฌธ์ .
์๋๋ ์ฒซ๋ฒ์งธ ํ์ด๋ค.
def solution(n, k):
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
number = ""
while n:
number = str(n % k) + number
n //= k
ret = 0
curr = ""
for num in number:
if num != "0":
curr += num
else:
if curr and is_prime(int(curr)):
ret += 1
curr = ""
if curr and is_prime(int(curr)):
ret += 1
return ret
ํต๊ณผ๋์ง๋ง ๋๋ฌด ๊ธธ์๋ค.
while๋ฌธ์ ํตํด k์ง๋ฒ์ผ๋ก ๋ณํํ ์ number์ ๊ตฌํด์ฃผ๊ณ ,
for๋ฌธ์ผ๋ก number์ ํ๋์ฉ ์ฒดํฌํ๋ค.
- ๋ง์ฝ 0์ด ์๋๋ผ๋ฉด curr์ ๋ํด์ค๋ค.
- 0์ด๋ผ๋ฉด curr์ด ๋น์ด์๋์ง ํ์ธ ํ is_prime()์ผ๋ก curr์ด ์์์ธ์ง ํ๋ณํ๋ค.
- ์ฌ์ฉํ curr์ ๋น ๋ฌธ์์ด๋ก ์ฌํ ๋นํ๋ค.
๋ง์ง๋ง ๋จ์ ๋ฌธ์์ด๋ ๋จ๊น์์ด ์ฒดํฌํด์ค๋ค.
๋๋ฌด ๊ธธ์ด์ ์ง์ฆ๋ฌ๋ค. ์๋๋ ๋๋ฒ์งธ ์ฝ๋.
def solution(n, k):
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
number = ""
while n:
number = str(n % k) + number
n //= k
numbers = number.split("0")
return sum(is_prime(int(num)) for num in numbers if num)
์๊น๋ณด๋จ ํ์คํ ์งง์์ก๋ค.
while๋ฌธ์ผ๋ก number์ ๊ตฌํ๋ ๊ฒ๊น์ง ๋์ผํ๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ด number์ "0"์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํด์คฌ๋ค.
๋ถํ ํด์ค ๊ฒฐ๊ณผ๊ฐ numbers๋ฅผ ์ํํ๋ฉฐ is_prime()์ผ๋ก ์์์ธ์ง ํ๋ณํด์ค๋ค.
๋ง์ฝ True๋ผ๋ฉด 1, False๋ 0์ ๋ฐํํ๋ฏ๋ก, sum()์ ํตํด ๋ชจ๋ ์์์ ๊ฐฏ์๋ฅผ ๊ตฌํ ์ ์๋ค.