참고: 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에 더해주며 갱신하다보면 정답이 된다.
화이팅 💪
'알고리즘(algo) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] DFS/BFS - 단어 변환 (0) | 2023.03.08 |
---|---|
[프로그래머스] 스택/큐 - 기능개발 (0) | 2023.03.04 |
[프로그래머스] 해시 - 전화번호 목록 (0) | 2023.03.03 |
[프로그래머스] 탐욕법(Greedy) - 체육 (0) | 2023.03.02 |
[프로그래머스] 완전탐색 - 카펫 (0) | 2023.02.17 |