coding test

프로그래머스 치킨쿠폰

ron_nie 2023. 6. 15. 20:09
728x90

문제

접근

  • 치킨 한마리당 쿠폰 한개이기 때문에 치킨과 쿠폰을 같다고 생각해도 된다
  • 즉, 10마리당 한마리 서비스를 받을 수 있기 때문에 치킨 수를 10으로 나누면 받을 수 있는 서비스 치킨 수가 나오고 이것은 곧 쿠폰수와 동일하다
  • 이때 나오는 나머지는 서비스는 받지 못하지만 남은 쿠폰수를 의미한다

    예시

    1081마리를 주문했다고 가정하면
    10으로 나눴을 때 몫 108과 나머지 1이 나온다.
    서비스로 받을 수 있는 치킨 수는 108마리이고 이것은 쿠폰수와 동일하다 남은 쿠폰은 1개이다
    쿠폰은 총 109개가 된다
    109개 쿠폰은 10마리로 바꿀 수 있고 쿠폰 9개가 남는다.
    1마리는 1개 쿠폰이기 때문에 다시 쿠폰 19개가 생기고 쿠폰 10개는 1마리로 변환되고 9개 쿠폰이 남는다 9개 쿠폰은 1마리로 변환이 안된다
    즉 서비스 치킨의 수는 108 + 10 + 1 +1 로 120이다

    코드설계

  • 10개 밑으로 내려갈때 까지 반복문을 돌려야 하기 때문에 while 사용
  • 몫과 나머지가 필요해서 divmod() 함수 사용
  • 몫을 answer = 0에 += 으로 더해주면서 할당하고 나머지와 몫을 더한 것은 chicken매개변수에 할당하여 반복

    결론

    def solution(chicken):
      answer = 0
      while chicken >= 10: #10마리까지만 쿠폰을 받을 수 있다. 9마리면 나눌 필요 없다
          # 몫과 나머지를 구해준다
          # 여기서 몫은 서비스 치킨의 수 나머지는 남은 쿠폰이다
          div,mod = divmod(chicken, 10) 
          answer += div # 몫(서비스로 받을 수 있는 치킨 수를 더해준다)
          # 몫(서비스로 받을 수 있는 치킨 수)은 쿠폰수와 같기 때문에(포인트 참고) 
          # 몫과 나머지를 더한것은 남은 쿠폰 수를 의미한다.
          chicken = div + mod
    
    
return answer

포인트 : 치킨 한마리당 쿠폰 한개이기 때문에 치킨마리 수 = 쿠폰 수 이다.

즉, chiken을 10으로 나누면 서비스로 받을 수 있는 치킨 마리 수가 나오고 나머지는 남은 쿠폰수가 된다.

```

반응형