본문 바로가기

알고리즘/python

[python/파이썬] 프로그래머스 Lv.1 콜라 문제

반응형

[문제 출처]

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
반응형