λ¬Έμ μ€λͺ
μμ μ μ nμ΄ μ£Όμ΄μ§λλ€. μ΄ μ«μλ₯Ό kμ§μλ‘ λ°κΏ¨μ λ, λ³νλ μ μμ μλ 쑰건μ λ§λ μμ(Prime number)κ° λͺ κ°μΈμ§ μμλ³΄λ € ν©λλ€.
- 0P0μ²λΌ μμ μμͺ½μ 0μ΄ μλ κ²½μ°
- P0μ²λΌ μμ μ€λ₯Έμͺ½μλ§ 0μ΄ μκ³ μΌμͺ½μλ μ무κ²λ μλ κ²½μ°
- 0Pμ²λΌ μμ μΌμͺ½μλ§ 0μ΄ μκ³ μ€λ₯Έμͺ½μλ μ무κ²λ μλ κ²½μ°
- Pμ²λΌ μμ μμͺ½μ μ무κ²λ μλ κ²½μ°
- λ¨, Pλ κ° μλ¦Ώμμ 0μ ν¬ν¨νμ§ μλ μμμ
λλ€.
- μλ₯Ό λ€μ΄, 101μ Pκ° λ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, 437674μ 3μ§μλ‘ λ°κΎΈλ©΄ 211020101011μ λλ€. μ¬κΈ°μ μ°Ύμ μ μλ 쑰건μ λ§λ μμλ μΌμͺ½λΆν° μμλλ‘ 211, 2, 11μ΄ μμΌλ©°, μ΄ 3κ°μ λλ€. (211, 2, 11μ kμ§λ²μΌλ‘ 보μμ λκ° μλ, 10μ§λ²μΌλ‘ 보μμ λ μμμ¬μΌ νλ€λ μ μ μ£Όμν©λλ€.) 211μ P0 ννμμ μ°Ύμ μ μμΌλ©°, 2λ 0P0μμ, 11μ 0Pμμ μ°Ύμ μ μμ΅λλ€.
μ μ nκ³Ό kκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. nμ kμ§μλ‘ λ°κΏ¨μ λ, λ³νλ μ μμμ μ°Ύμ μ μλ μ 쑰건μ λ§λ μμμ κ°μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ.
- 1 ≤ n ≤ 1,000,000
- 3 ≤ k ≤ 10
μ μΆλ ₯ μ
λ¬Έμ μμμ κ°μ΅λλ€.
μ μΆλ ₯ μ #2
110011μ 10μ§μλ‘ λ°κΎΈλ©΄ 110011μ λλ€. μ¬κΈ°μ μ°Ύμ μ μλ 쑰건μ λ§λ μμλ 11, 11 2κ°μ λλ€. μ΄μ κ°μ΄, μ€λ³΅λλ μμλ₯Ό λ°κ²¬νλλΌλ λͺ¨λ λ°λ‘ μΈμ΄μΌ ν©λλ€.
νμ΄ μ½λ
import math
def change_k_num(num, k):
# 10μ§μλ₯Ό kμ§μλ‘ λ³κ²½νλ ν¨μ
result = []
while num // k != 0:
result.append(num % k)
num = num // k
result.append(num)
return ''.join(map(str, result[::-1]))
def is_prime(num):
# μμμΈμ§ νλ³νλ ν¨μ
if num == 1:
return False
elif num == 2 or num == 3:
return True
for i in range(2, math.ceil(num**0.5) + 1):
if num % i == 0:
return False
return True
def solution(n, k):
answer = 0
can_prime = list(change_k_num(n, k).split('0'))
for c in can_prime:
if c == '':
continue
num = int(c)
if is_prime(num):
answer += 1
return answer
μμ νλ³, μ§μ λ³ν ꡬνλ¬Έμ μ΄λ€.
λ¬Έμ μ νΉμ±μ, λ¬Έμμ΄μ '0'μΌλ‘ λλλ©΄ νλ³ν΄μΌ ν 10μ§μλ€μ λͺ©λ‘μ ꡬν μ μλ€.
10μ§μλ₯Ό kμ§μλ‘ λ°κΎΈλ μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°λ€.
2μ§μλ₯Ό μμλ‘ λ€μμ§λ§, kμ§μλΌλ©΄ 2λ‘ λλμ§ μκ³ kλ‘ λλ μ£Όλ©΄ λμΌνλ€.
λλ΄μ λ λͺ«μ΄ 0μ΄ λ λκΉμ§ λλλ κ²μ κ³μν΄μ λ°λ³΅νκ³ , λλ¨Έμ§λ₯Ό κ±°κΎΈλ‘ μ½μ΄μ£Όλ©΄ μ§μ λ³νμ΄ λλ€.
λ°λΌμ ꡬνν λ, λλ¨Έμ§λ₯Ό κ³μν΄μ listμ appendνκ³ ,
λͺ«μ΄ 0μ΄ λλ©΄ list[::-1]λ‘ λ€μ§μ΄μ ꡬνλ€.
μμ νλ³ μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λμ λ§κ² ꡬν μ μλ λ§μ λ°©λ²μ΄ μλ€.
νμκ° κ΅¬νν κ²μ O(N**0.5)μ μκ° λ³΅μ‘λλ₯Ό κ°μ‘λ€.
μΌλ¨, O(N)μ μκ° λ³΅μ‘λλ‘ κ΅¬νλ λ°©λ²μΌλ‘λ, λΈλ£¨νΈ ν¬μ€λ‘ ꡬν μ μλ€.
kλ₯Ό 2λΆν° kκΉμ§ λλ μ λλ¨Έμ§κ° 0μΈ κ²μ΄ νλλΌλ μλμ§ νμΈνλ μκ³ λ¦¬μ¦μΌλ‘ ꡬνλ©΄ λλ€.
νμ§λ§, μ μκ°ν΄λ³΄λ©΄ kλ₯Ό 2λΆν° k**0.5κΉμ§ λλ λ μμλ₯Ό ꡬν μ μλ€.
μλ₯Ό λ€μ΄, 80μ μ½μλ€μ νμΈν΄λ³΄μ.
{1, 2, 4, 5, 8, 10, 16, 20, 40, 80}
μ½μλ κ³±ν΄μ kκ° λλ μ§μ κ°μ§κ³ μκΈ° λλ¬Έμ, λ°μ λ²μκΉμ§λ§ νμΈν΄λ λλ€.
κ°μ΄λ°κ° λλ κ°μ k ** 2μ΄λ―λ‘, μ¬κΈ°κΉμ§ νμΈνλ©΄ μκ°λ³΅μ‘λκ° O(N**0.5)κ° λλ€.
def is_prime(num):
# μμμΈμ§ νλ³νλ ν¨μ
if num == 1:
return False
elif num == 2 or num == 3:
return True
for i in range(2, math.ceil(num**0.5) + 1):
if num % i == 0:
return False
return True
'π μ½λ©ν μ€νΈ λλΉ : PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] νλ¦°ν° (level2, python) (0) | 2022.09.12 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] [1μ°¨] λ΄μ€ ν΄λ¬μ€ν°λ§ (level2, python) (0) | 2022.09.12 |
[νλ‘κ·Έλλ¨Έμ€] μΌκ·Ό μ§μ (level3, python) (0) | 2022.09.10 |
[νλ‘κ·Έλλ¨Έμ€] n^2 λ°°μ΄ μλ₯΄κΈ° (level2, python) (0) | 2022.09.10 |
[νλ‘κ·Έλλ¨Έμ€] κΈ°λ₯κ°λ° (level2, python) (1) | 2022.09.10 |