알고리즘(algo)/프로그래머스

[프로그래머스] 구현 - 콜라문제

dDong2 2023. 3. 5. 11:43
참고: https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

✔️ 문제

 

 

문제는 다음과 같다.

 

 

✔️ 풀이

 

 

 

다음과 같이 빈병 a(2)개를 가져다주면 b(1)개씩 돌려주는 마트가 있는데,

계속해서 받는 병과 빈병을 나누다보면 최종적으로 몇 병까지 받을 수 있는가에

대해서 출력하는 문제이다.

 

n이 20에서 출발해 2으로 계속 나누다보면 10,5,2,1까지 병을 받을 수 있는데,

3번째 과정에서 한 개의 병이 남는 것을 확인할 수 있고

이것을 기억해두었다가 마지막에 남는 1병과 더해서 추가로 1병을 더 받게 된다.

그러면 10+5+2+1+1로 해서 총 19개의 병을 받을 수 있게 된다.

 

def solution(a, b, n):
    answer = 0
    
    while n >= a:
        cnt = n // a * b
        rest = n % a
        answer += cnt
        n = cnt + rest
    
    return answer

 

노트에 풀면서 규칙을 찾을 수 있었는데,

우리가 세는 병은 n을 a로 나눈 몫에 b를 곱한 것과 동일하다는 것이고

3번째 과정처럼 몫으로 나눈 나머지가 존재할 수 있기 때문에 rest를 선언해준다.

n이 a보다 크거나 같을 때까지 반복하면서 n은 센 갯수에 나머지를 더해주고

계속해서 반복하여 센 갯수를 answer에 더해주며 갱신하다보면 정답이 된다.

 

화이팅 💪