코테 대비 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. 사고과정 => 무조건 나누는 것이 이득이다라는 것을 파악하는것