알고리즘(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에 더해주며 갱신하다보면 정답이 된다.
화이팅 💪