https://www.codewars.com/kata/51e04f6b544cf3f6550000c1/train/python
Kata5 Beeramid
두 가지의 매개변수, 총금액과 맥주 한캔의 가격을 받는 심플한 알고리즘이다.
여기서 중요한 것은
피라미드의 한 층을 구하는 방법인데
피라미드는 1부터 시작해서 n층일 경우 n의 제곱으로 만들어져야만 한다.
그러니까
3층일 경우
1 + 2 x 2 x 3 * 3 = 총 14개가 된다.
숫자가 작을 경우 층을 완성할 수 없는 것으로 간주한다.
문제를 나누어서 생각해보면 간단하다.
for loop이 몇번 돌았는지를 확인하면 되는 것으로,
실제로도 10분 안에 풀 수 있었지만, 한가지 사소한 착각을 한 덕에 딱 12분 걸렸다.
def beeramid(bonus, price):
# your code
# 매개변수로 인해 일어날 수 있는 에러를 막는다. 물론 number 타입이 아니 # 라면 에러가 일어날 수 있겠다.
if bonus <= 0 or price <= 0:
return 0
left = bonus
result = 0
while left > 1 :
if result == 0:
subtractor = price
else:
# subtractor = ((result) * (result) * price)
# 이렇게 계산하게 되면, for loop의 index 역할을 하는 result
# 가 0에서 부터 시작하기 때문에 1층이 두 번 계산된다!
subtractor = ((result + 1) * (result + 1) * price)
calculated = left - subtractor
if calculated >= 0:
left = calculated
result = result + 1
else:
break
return result