[CodeWars] 맥주 피라미드

Sal Jeong·2022년 5월 16일
0
post-thumbnail

https://www.codewars.com/kata/51e04f6b544cf3f6550000c1/train/python

Kata5 Beeramid

보너스 액수가 다할 때까지 맥주를 마시고 피라미드를 쌓는다면, 몇 줄까지 완성이 될까?

두 가지의 매개변수, 총금액과 맥주 한캔의 가격을 받는 심플한 알고리즘이다.

여기서 중요한 것은

피라미드의 한 층을 구하는 방법인데

피라미드는 1부터 시작해서 n층일 경우 n의 제곱으로 만들어져야만 한다.

그러니까

3층일 경우

1 + 2 x 2 x 3 * 3 = 총 14개가 된다.

숫자가 작을 경우 층을 완성할 수 없는 것으로 간주한다.

문제를 나누어서 생각해보면 간단하다.

for loop이 몇번 돌았는지를 확인하면 되는 것으로,

  1. 맥주 층의 총 값은 n x n x 맥주가격이다.
  2. for loop이 한 번 돌면서 해당 층의 총 가격을 계산하고, 총량에서 계속 빼누다.
  3. 1.의 맥주 가격이 보너스 총액보다 높아지면 종료한다.

실제로도 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
        
        
        
profile
행복하기 위해 코딩합니다. JS 합니다.

0개의 댓글