참조: https://school.programmers.co.kr/learn/courses/30/lessons/42862
문제
문제는:
설명
다음과 같이 (2)개의 빈 병을 가져오면 b(1)개의 병을 반환하는 시장이 있습니다.
병과 빈 병을 계속 얻는다면 결국 몇 병을 얻을 수 있습니까?
출력에 관한 것입니다.
n이 20에서 시작하여 2로 더 나누면 최대 10,5,2,1까지 병을 얻을 수 있습니다.
세 번째 과정에서 한 병이 남아있는 것을 볼 수 있습니다.
이 점을 명심하면 남은 병 위에 여분의 병이 남게 될 것입니다.
그러면 10 + 5 + 2 + 1 + 1이 되어 총 19병이 됩니다.
def solution(a, b, n):
answer = 0
while n >= a:
cnt = n // a * b
rest = n % a
answer += cnt
n = cnt + rest
return answer
공책에서 해결 규칙을 찾을 수 있었고,
우리가 세고 있는 병은 n을 a 곱하기 b로 나눈 몫과 같습니다.
3번째 과정과 같이 몫으로 나눈 나머지가 존재할 수 있으므로 나머지를 선언한다.
n이 a보다 크거나 같고 n이 카운트에 나머지를 더할 때까지 이 프로세스를 반복합니다.
답에 카운트를 더하는 것을 계속 반복하며 업데이트하면 정답이 됩니다.
화이팅