문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/132267
소스 코드
def solution(a, b, n):
answer = 0
# 가지고 있는 콜라병이 교환 가능한 동안에
while n >= a:
# 빈 병 개수 추가
answer += (n // a * b)
# 교환하지 못하고 남은 병 + 새로 얻은 콜라
n = (n % a) + (n // a * b)
return answer
해설
- 단순 구현 문제
while문의 조건을 이용해 교환이 가능한 콜라가 남아있을 때는 answer값을 계속 더해줄 수 있도록 세팅합니다.
한 시점에서의 콜라 n개는 전부 마시게 되어 빈 병 n개가 생깁니다.
이때 n개 중 a가 몇 번 들어가는지, 즉 n를 a로 나눈 몫에 비례하여 새 콜라 b개를 받습니다.
예를 들어 현재 n = 10, a = 3, b = 2라고 가정하겠습니다.
이때 콜라 10병을 전부 마시면 빈 병 10개가 생깁니다.
그렇다면 빈 병 3개를 가져갈 때마다 새 콜라 2개를 받게 되므로, (10//3)*2 = 3*2 = 6개의 콜라를 새로 받습니다.
아직 교환하지 않은 콜라 빈 병은 (10%3) = 1 이므로, 새로 받은 콜라 6개와 더해준 값이 새로운 n=7이 됩니다.
이 n은 a=3으로 나누었을 때 몫이 1 이상이므로 같은 과정을 반복할 수 있습니다.
n을 a로 나누었을 때 몫이 0인 경우, 즉 n이 a보다 작아지는 경우에는 더이상 새로운 콜라를 받을 수 없으므로 while문을 종료하고 정답을 반환합니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 햄버거 만들기(Python) (0) | 2023.02.14 |
---|---|
[프로그래머스] 옹알이 (2)(Python) (0) | 2023.02.14 |
[프로그래머스] 개인정보 수집 유효기간(Python) (0) | 2023.02.14 |
[프로그래머스] 숫자 짝꿍(Python) (0) | 2023.02.13 |
[프로그래머스] 삼총사(Python) (0) | 2023.02.13 |