[이코테] 실전문제 4번 1이 될 때까지

2023. 2. 16. 22:38Algorithm

문제 

 

n이 1이 될 때까지 반복한 횟수를 출력해라

조건

 

조건 1.  n / k가 딱 떨어지는 경우 나눈다 

조건 2.  아닌 경우에는 n - 1을 해준다 

 

처음 시도 한 풀이

 

n,k = map(int, input().split())
result = 0

while n > 1:

  # n을 k로 나눴을 때 0 나오고 n이 1  보다 큰 경우
  if(n % k == 0):
    n = n / k
    result += 1
    
  else:
    n -= 1
    result += 1

print(result)

 

정말한 간단한 풀이다.

근데 이런식으로 풀게되면 데이터가 큰 경우에는 매우 큰 시간이 걸린다.

슬프지만 이 코드는 사용할 수 없다. 솔직히 난 이게 맞는 줄 알고 풀었다...

문제를 풀수록 자신감이....

 

책에 있는 솔루션이다... 

n,k = map(int, input().split())
result = 0

while True:
  # 값이 나눠떨어지면 그대로 아니라면 -1 상태
  value = (n//k) * k
  # n 값이 그대로라면 result값이 0 증가할 것이고 -1이되었다면 1 떨어질 것이다 하단에서 n 값이 1이 되어버린 경우에는 1이 더 더해지므로 break 이후에는 1을 빼줘야된다
  result += n - value
  
  n = value
  if n < k:
    break

  # 위에서 result 값이 나눠떨어 증가하지 않은 경우 1 증가한다 나눠 떨어진 경우 아래에서 나누는 경우가 있으므로 상관없음
  n //= k
  result += 1
  
result += (n-1)
print(result)

 

솔직히 처음에는 while문 하단에 있는 부분이 이해되지 않았다..

그래서 하나하나 디버깅해보면서 풀이를 해봤는데 주석으로 적어봤다

 

아직까지는 이러한 문제를 푸는거 조차 너무 어렵지만 할 수록 늘거라고 믿는다...