기출 : 2018 E 기업 알고리즘 대회


[정당성 분석]

→ 가능하면 최대한 많이 나누는 작업(2번 방법)이 최적 !

# 답안 예시 : 시간복잡도가 훨씬 적은 코드 (테크닉)
# while문 한번 실행 시 n을 k로 나누는 연산이 실행되므로 log시간
n, k = map(int, input().split())
result = 0

while True:
    # N이 K로 나누어 떨어지는 수가 될 때까지 빼기
    target = (n // k) * k
    result += (n - target)
    n = target
    # N이 K보다 작을 때 반복문 탈출
    if n < k:
        break
    result += 1
    n //= k
  
result += (n - 1)
print(result)
# 내가 짠 코드
# 간단하지만 항상 n이 k로 나누어 떨어지는지 체크해야 함.
n, k = map(int, input().split())
count = 0

while n != 1: # 1이 될 때까지
    if n%k == 0: # 2번 방법
        n = n // k
        count += 1
    else: # 1번 방법
        n -= 1
        count += 1

print(count)