[문제 출처]
https://school.programmers.co.kr/learn/courses/30/lessons/132267
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 풀이]
빈 콜라 병 a개를 가져다주면 b개의 콜라를 주는 마트가 있다고 한다.
초기에 빈 병이 n개 있다고 할 때, 몇 개의 콜라를 받을 수 있는지 구하는 문제이다.
콜라를 받으면 그 콜라를 마신 빈 병이 또 나오기 때문에 더 이상 교환이 안될 때까지 계산하여 답을 구해야 한다.
예를 들어
a = 2
b = 1
n = 20이라고 하면
현재 가지고 있는 빈 병은 20개이며, 빈 병 2개를 가져다주면 1병의 콜라를 준다.
따라서 초기 빈 병을 교환하면 10개의 콜라를 받게 되면 모든 빈 병은 소진되며, 10개의 콜라를 마시면 다시 10개의 빈병이 생긴다.
이 빈 병은 다시 5병의 콜라로 바뀐 후에, 다시 5병의 빈 병으로 바뀐다.
이러한 과정을 거쳐서 정답을 구하면 된다.
✅소스 코드
빈 병의 개수인 n이 a보다 작아지면 더 이상 콜라로 교환이 불가능하므로, n이 a보다 크거나 같을 때 반복해 준다.
교환되는 콜라의 개수인 tmp는 n을 a로 나눈 몫에 b를 곱한 값이 된다.
이 값은 정답에 더해지며, 빈 병의 개수는 a로 나눈 나머지가 된다.
예를 들어 빈 병이 5개고 2개가 1개의 콜라로 교환된다고 하면, 2병의 콜라로 교환 후에는 1병의 빈 병이 남게 된다.
그 후에 교환된 콜라는 다시 빈 병이 되므로 그만큼 n에 더해준다.
def solution(a, b, n):
answer = 0
while n >= a:
tmp = (n // a) * b
answer += tmp
n %= a
n += tmp
return answer
'알고리즘 > python' 카테고리의 다른 글
[python/파이썬] 백준 1629 곱셈 (0) | 2023.03.09 |
---|---|
[python/파이썬] 프로그래머스 Lv.1 삼총사 (0) | 2023.03.08 |
[python/파이썬] 프로그래머스 Lv.1 푸드 파이트 대회 (0) | 2023.03.06 |
[python/파이썬] 프로그래머스 Lv.1 과일장수 (0) | 2023.03.03 |
[python/파이썬] 프로그래머스 Lv.1 문자열 나누기 (0) | 2023.03.02 |