화폐단위의 종류가 k라고 할 때, 시간 복잡도는 O(k)
거슬러줘야 하는 금액과 시간복잡도는 무관하다!
n, k = map(int, input().split())
cnt = 0
while True:
target = (n // k) * k # k로 나누어떨어지는 수 만들기
cnt += (n-target) # 이만큼 1을 빼줌
n = target
if n < k: # 더 이상 나눌 수 없을 때 빠져나옴
break
cnt += 1 # k로 나눈 횟수 더하기
n //= k # n을 k로 나눔
cnt += (n-1) # n < k 일때 빠져나왔으므로 1이 될때까지 1을 빼준 횟수 더하기
print(cnt)
s = list(map(int, input()))
ans = s[0]
for i in range(1, len(s)):
num = s[i]
if num <= 1 or ans <= 1:
ans += num
else:
ans *= num
print(ans)
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
cnt = 0
i = 0
while True:
if len(arr) == 0 or len(arr) < arr[i]:
break
end = arr[i]
del arr[:end]
cnt += 1
print(cnt)
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
ans = 0 # 그룹 개수
cnt = 0 # 현재 그룹에 포함된 모험가의 수
for i in arr:
cnt += 1 # 현재 그룹에 포함시키기
if cnt >= i: # 그룹 멤버가 현재 모험가의 공포도 이상
ans += 1 # 그룹 결성
cnt = 0 # 멤버 수 초기화
print(ans)