[문제]
문제를 열심히 풀던 상빈이는 일반화된 콜라 문제를 생각했습니다. 이 문제는 빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.
콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 상빈이가 가지고 있는 빈 병의 개수 n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.
[풀이]
a개를 반환하고 b개의 새병을 받는 이 과정을 a - b로 생각해보자. 해당 과정이 몇번 반복되는지 알고, 여기에 반환받는 병의 개수를 구하면 전체 몇 병을 받는지 알 수 있을 것이다.
하지만 여기서 짚고 넘어가야하는 것이 첫거래는 a - b 가 성립이 되지 않는다는 점이다. 왜냐하면 내가 가진 병이 a 개가 되지 않으면 애초에 b개를 받을 수 없기 때문이다. 이를 n 에서 b 를 빼줌으로서 보정해줄 수 있다.
def solution(a, b, n):
return max(n - b, 0)//(a-b) * b