티스토리 뷰

프로그래머스 - 콜라 문제

문제

  • 콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다 주면 몇병을 받을 수 있는가? 단 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.
  • 위의 문장이 콜라 문제의 전제이다.
  • 콜라를 받기 위해 주어야하는 병 수 a, 빈 병을 받고 마트가 주는 콜라 병 수를 b, 빈 병의 개수를 n이라 하여 입력으로 주어졌을 때, 몇 병의 콜라를 받을 수 있는가?

코드

def solution(a, b, n):
    cnt = 0

    while n >= a:
        d, m = divmod(n, a)
        n = d * b + m
        cnt += d * b

    return cnt

설명

  • 문제를 일반화하여 규칙을 찾으니 쉽게 해결할 수 있었다.
  • 문제의 해답은 몫과 나머지에 있다. 주어진 a의 값으로 빈 병 수 n을 나누는 연산을 반복한다. 빈 병 수가 새 콜라로 바꿔지기 위한 최소한의 개수가 되지 않는다면 콜라를 바꿀 수 없기에 이를 조건에 걸어준다. 이 나눔 연산은 콜라병을 교환하는 행위에 해당한다.
  • 매 반복문마다 몫과 입력으로 주어진 마트에서 새 콜라로 바꿔주는 기준이 되는 병 수인 b를 곱해준 후 나눔의 나머지 값을 더해준다. 이렇게 하면 한번 콜라를 마트에서 교환한 후 다시 교환할 때의 가지고 있는 콜라 병 수가 된다.
  • 나눔 연산의 몫이 정상적으로 교환 된 콜라 병의 수이기 때문에 카운트 값에 과 교환 기준 콜라 병 수인 b를 계속해서 더해주면 매 교한시마다 콜라를 몇병 교환했는지를 알 수 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함