처음 생각한 풀이는 아래와 같음
# 입력
n, k = map(int, input().split())
result = 0
while n > 1:
if n % k == 0:
# n이 k로 나누어 떨어지는 경우
n //= k
result += 1
else:
# n이 k로 나누어 떨어지지 않는 경우
n -= 1
result += 1
print(result)
강의의 해답에서 시간 복잡도를 줄이는 방식이 인상 깊었음
target = (n // k) * k
→ n이하의 가장 큰 k 배수 구하기
1씩 줄이는걸 반복해서 구하는게 아니라 한번에 구함
# 입력
n, k = map(int, input().split())
result = 0
while True:
target = (n // k) * k # n이하의 n과 가장 가까운 k의 배수
result += (n - target)
n = target
if n < k:
break
result += 1
n //= k
result += (n - 1)
print(result)
# 곱하기 혹은 더하기
# 입력
string = input()
max = int(string[0])
for i in range(1, len(string)):
num = int(string[i])
# 둘 중 하나가 0인 경우 더하기
if max * num == 0:
max += num
# 둘 중 하나가 1인 경우 더하기
elif max == 1 or num == 1:
max += num
# 이외의 모든 경우는 빼기
else:
max *= num
print(max)
# 모험가 길드
n = int(input())
data = list(map(int, input().split()))
data.sort()
result = 0
count = 0
for i in data:
count += 1
if count >= i: # 현재 그룹에 포함된 모험가의 수가 현재의 공포도 이상이라면 그룹 결성
result += 1
count = 0
print(result)
# 거스름돈
coins = [500, 100, 50, 10, 5, 1] # 거스름돈 리스트
count = 0
price = int(input())
change = 1000 - price
for coin in coins:
# while문 대신 몫과 나머지를 이용
count += change // coin
change = change % coin
print(count)
# 설탕 배달
n = int(input())
# n = 5 * a + 3 * b
a = n // 5
while a >= 0:
gap = n - a * 5
if gap % 3 == 0:
print(a + gap//3)
exit()
else:
a -= 1
print(-1)