[이코테] 실전문제 4번 1이 될 때까지
2023. 2. 16. 22:38ㆍAlgorithm
문제
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문 하단에 있는 부분이 이해되지 않았다..
그래서 하나하나 디버깅해보면서 풀이를 해봤는데 주석으로 적어봤다
아직까지는 이러한 문제를 푸는거 조차 너무 어렵지만 할 수록 늘거라고 믿는다...
'Algorithm' 카테고리의 다른 글
[이코테] 상하좌우 (0) | 2023.03.05 |
---|---|
[1978 - 파이썬] - 소수 찾기 (0) | 2023.03.04 |
[2839 - 파이썬] - 설탕배달 (0) | 2023.02.22 |
[2775번 - 파이썬] - 부녀회장이 될테야 (0) | 2023.02.22 |
[이코테] 실전문제 2번 큰 수의 법칙 (0) | 2023.02.09 |