π©π»βπ»λ¬Έμ μ€λͺ
[μ΄μ½ν
Ch3-4] 1μ΄ λ λκΉμ§ (그리λ)
μ΄λ ν μ Nμ΄ 1μ΄ λ λ κΉμ§ λ€μμ λ κ³Όμ μ€ νλλ₯Ό λ°λ³΅μ μΌλ‘ μ ννμ¬ μννλ €κ³ νλ€.
λ¨, λλ²μ§Έ μ°μ°μ Nμ΄ Kλ‘ λλμ΄λ¨μ΄μ§ λλ§ μ νν μ μλ€.
1. Nμμ 1μ λΊλ€.
2. Nμ Kλ‘ λλλ€. (Nμ΄ Kλ‘ λλμ΄λ¨μ΄μ§ λλ§ μ νκ°λ₯)
μλ₯Ό λ€μ΄ Nμ΄ 17, Kκ° 4λΌκ³ κ°μ νμ. μ΄λ 1λ²μ κ³Όμ μ ν λ² μννλ©΄ Nμ 16μ΄ λλ€.
μ΄νμ 2λ²μ κ³Όμ μ λ λ² μννλ©΄ Nμ 1μ΄ λλ€. κ²°κ³Όμ μΌλ‘ μ΄κ²½μ° μ 체과μ μ μ€νν νμλ 3μ΄λλ€. μ΄λ Nμ 1λ‘ λ§λλ μ΅μ νμμ΄λ€.
Nκ³Ό Kκ° μ£Όμ΄μ§ λ Nμ΄ 1μ΄ λ λκΉμ§ 1λ² νΉμ 2λ²μ κ³Όμ μ μνν΄μΌνλ μ΅μ νμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯쑰건
- 첫째μ€μ N(2 <= N < = 100000)κ³Ό K(2 <= K < = 100000)κ° κ³΅λ°±μΌλ‘ ꡬλΆλλ©° κ°κ° μμ°μλ‘ μ£Όμ΄μ§λ€. μ΄λ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ Nμ νμ Kλ³΄λ€ ν¬κ±°λ κ°λ€.
μΆλ ₯쑰건
- 첫째μ€μ Nμ΄ 1μ΄ λ λκΉμ§ 1λ² νΉμ 2λ²μ κ³Όμ μ μνν΄μΌ νλ νμμ μ΅μκ°μ μΆλ ₯νλ€.
μ λ ₯ μμ
25 5
μΆλ ₯ μμ
2
βοΈIdea Sketch
μκ³ λ¦¬μ¦ : 그리λ
ν΄λ² : μ£Όμ΄μ§ Nμ λνμ¬ Kλ‘ μ΅λν λ§μ΄ λλ΄μ λ κ°μ₯ λΉ λ₯΄κ² N = 1μ λ§λ€ μ μλ€.
μκ°λ³΅μ‘λ
νμ μ°μ° 1 (Nμμ 1μ λΊλ€) λ§ μννλ μ΅μ μ μν©μ κ³ λ €ν΄λ³΄μ. μ΄ κ²½μ° O(n)μ΄λ©°, μ΄ λ nμ 100,000μ΄λ€. μ΄λ 1μ΅μ νμ°Έ λͺ» λ―ΈμΉλ―λ‘ μκ° μ΄κ³Όμ μΌλ €κ° μλ€.
κ°μ λ°©μ
μ°μ° 1 (Nμμ 1μ λΊλ€) μ κ°μ ν΄λ³΄μ. λ¨μ λ΅μμ κ²½μ°, Nμ΄ Kλ‘ λλμ΄λ¨μ΄μ§λ κ°μ΄ λ λκΉμ§ Nμμ 1μ© μ°¨κ·Όμ°¨κ·Ό λΊλ€. μ΄λ₯Ό κ°μ νμ¬ Nμμ 1μ μΌλ§λ λΉΌμΌ νλμ§ κ³μ°νμ¬ ν λ²μ λΉΌμ. Nμ Kλ‘ λλ λλ¨Έμ§λ₯Ό Nμμ λΉΌλ©΄ λλ€.
βοΈλ΄ μμ€μ½λ 1
λ¨μ λ΅μ : Nμμ 1μ© λΉΌκΈ°
import sys
si = sys.stdin.readline
LIMIT = 100_000
n, k = map(int, si().split())
for cnt in range(LIMIT):
# μ’
λ£μ‘°κ±΄
if n == 1:
print(cnt)
break
# μ°μ° 2
if n % k == 0:
n = int(n/k)
# μ°μ° 1 : Nμμ 1μ© λΉΌκΈ°
else:
n -= 1
βοΈλ΄ μμ€μ½λ 2
κ°μ λ΅μ : Nμ Kλ‘ λλ λλ¨Έμ§λ₯Ό Nμμ λΉΌκΈ°
import sys
n, k = map(int, si().split())
cnt = 0
while n > 1: # μ’
λ£μ‘°κ±΄
# μ°μ° 2
if n % k == 0:
n = int(n / k)
cnt += 1
# μ°μ° 1 : Nμ Kλ‘ λλ λλ¨Έμ§λ₯Ό Nμμ λΉΌκΈ°
else:
cnt += (n % k)
n -= (n % k)
print(cnt if n else cnt - 1) # nμ΄ 0μΈ κ²½μ° n + 1, cnt - 1