코테 대비 python/백준
1이 될 때 까지
ylab
2022. 2. 18. 16:35
출처: 이코테
# 어떤수 N이 1이 될때 까지 두과정중 한가지를 반복적으로 시행 2번은 N이 K로 나누어 떨어질 때만 가능
N,K= map(int,input().split())
#사실상 1빼는 것보다 나누는게 무조건 이득인 상황 따라서 그리디
#카운트 초기화
count =0
#1일 때까지 계속 해야되므로 while문 사용
while N!=1:
if N%K==0:
N= N//K
count+=1
else:
N-=1
count+=1
print(count)
===================================================
#답지 풀이 1
n, k =map(int, input().split())
result = 0
while n >=K:
while n%k !=0:
n-=1
result +=1
n//=K
result +=1
while n>1:
n-=1
result +=1
print(result)
#답지 풀이 2
n,k = map(int,input().split())
result = 0
while True:
target = (n//k)*k
result +=(n-target)
n = target
if n <k:
break
result +=(n-target)
n=target
if n<k:
break
result +=1
n//=k
result +=(n-1)
print(result)
답지풀이도 공부하는 것이 도움이 되는 것 같다.
물론 내 풀이가 더 깔끔할 때도 있지만
모든 상황에 적용되지는 않으므로
답지처럼 case by case로 나누는 연습도 해야겠다.
얻은것
1. 점점 그리디문제에 익숙해지는 것 같다
2. 사고과정 => 무조건 나누는 것이 이득이다라는 것을 파악하는것