알고리즘/Programmers

[Programmers] 콜라문제(Level. 1)

yc7764 2022. 11. 26. 23:10

문제설명

https://school.programmers.co.kr/learn/courses/30/lessons/132267

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제풀이

제출코드

def solution(a, b, n):
    answer = 0
    bottle = n
    while bottle >= a:
        re_b = bottle // a * b
        answer += re_b
        bottle = bottle % a + re_b
    return answer
  • 반복문을 사용하여 계산을 진행했으며 병의 개수가 a개보다 적으면 콜라를 받을 수 없으므로 a개보다 적을 때까지 계산을 진행했다. 다른 사람의 풀이를 참고했을 때 더 좋다고 생각한 코드가 있어 살펴보았다.

다른 사람의 풀이

solution = lambda a, b, n: max(n - b, 0) // (a - b) * b
  • a개만 팔고 b개를 받는 과정은 결국  n개의 빈 병에서 a-b 개씩 병을 소비하는 것으로 생각한다. 첫번째 진행할 때는 a개만 소비되기 때문에 b만큼 못받으므로 n-b로 계산하고 a-b개씩 병을 소비하므로 n-b // (a-b)번 병을 소비한다. 여기에 받는 콜라의 수 b 곱한 결과를 반환한다.