학교 앞 카페에서 아메리카노를 한 잔을 사면 쿠폰을 한 장 받을 수 있다.
이 쿠폰은 카페에서 요구하는 필요 개수(N)를 채우면 아메리카노 한잔으로 다시 교환 할 수 있다.
그런데 이 가게는 특이하게도 쿠폰을 모아 아메리카노로 교환할 때에도 쿠폰을 또 한 장 준다.
현재 영일이가 가진 쿠폰의 개수(K)와 카페에서 요구하는 필요 쿠폰 개수(N)가 입력되면, 최대한 먹을 수 있는 아메리카노의 개수를 계산하는 프로그램을 작성하시오.
현재 영일이가 가진 쿠폰 개수(K)와 카페에서 요구하는 필요 쿠폰 개수(N)이 공백으로 구분되어 입력된다.
(1<= K <= 2,000), (1 < N < 1000)
10 3
영일이가 먹을 수 있는 최대 아메리카노 개수를 출력한다.
4
커피를 바꿔먹은 것에 대한 부분을 함수로 구현하였다.
처음 코드를 작성하기 전에는 아래와 같이 시뮬레이션을 돌려보았다.
- 내 쿠폰 개수 : N개 / 아메리카노 교환 필요 쿠폰 개수 : M개
- 교환 후 잔여 개수 : (M/N) + M
입력값 : 10 2
1) 내 쿠폰 개수 : 10개
2) 내가 마신 아메리카노 : 5잔
3) 잔여 쿠폰 : 5개
4) 내가 마실 수 있는 아메리카노 : 2잔
5) 잔여 쿠폰 : 1개(남은거) + 2개(마시면서 받은거) = 3개
6) 내가 마실 수 있는 아메리카노 : 1잔
7) 잔여 쿠폰 : 1개 + 1개(마시면서 받은거) = 2개
8) 내가 마실 수 있는 아메리카노 : 1잔
9) 잔여 쿠폰 : 1개총합 : 5+2+1+1 = 9잔
어떤식으로 코드를 짜야할지 먼저 정해놓고, 그 다음에 이대로 코드를 작성하였다.
처음에는 tries로 아메리카노의 전체 개수를 구하려고했으나, 이대로 진행했을때는 코드가 계속 복잡해지는 것을 느껴서 값을 아예 따로 두었다.
계속 형변환에서 걸려서 모두 int로 변경하였으나, 이는 더 좋게 표현할 방법이 있으면 추후에 바꿔줄 예정이다.
my_coupon_cnt, need_coupon_cnt = input().split(' ')
def change_americano(my_coupon_cnt, need_coupon_cnt):
tries,coffee = 0,0
remaining_coupon = int(my_coupon_cnt)
while int(remaining_coupon) >= int(need_coupon_cnt):
tries = int(remaining_coupon)/int(need_coupon_cnt)
coffee += int(tries)
remaining_coupon = int(int(remaining_coupon)%int(need_coupon_cnt)) + int(tries)
return coffee
print(change_americano(my_coupon_cnt,need_coupon_cnt))