문제
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- chicken은 정수입니다.
- 0 ≤ chicken ≤ 1,000,000
입출력 예시
chicken result
100 11
1,081 120
풀이
- 쿠폰이 서비스 치킨에서도 나오는데 이 처리를 잘 해주어야한다.
- 주문 치킨이 0이 될 때 까지 반복문을 통해 처리해주도록 한다
풀이 1 - 내 풀이
def solution(chicken):
answer = 0
remain_sum = 0
while chicken>0:
service = chicken//10
remain_coupon = chicken%10
chicken = service
answer+=service
remain_sum+=remain_coupon
if remain_sum>=10:
answer+=1
remain_sum-=9
return answer
answer
변수에 서비스 치킨의 수를 계속 더해주고, remain_sum
변수에는 남은 쿠폰 수를 계속 더해주면서 그에 대한 서비스 치킨의 수를 더해줄 것이다.
while chicken>0:
반복문을 사용해 주문하는 치킨의 수가 0이 될 때 까지 계속 무한 반복해준다. chicken
변수는 service
치킨 변수로 바뀌며 반복문을 돌게 된다.
service
는 치킨을 입력받은 변수 chicken
만큼 주문하면 받을 수 있는 치킨의 수 이다. remain_coupon
은 쿠폰으로 서비스 치킨을 시킨 후 남은 쿠폰의 수 이다.
- 그렇게 값을 구해주면
chicken
변수에 다시 주문한 service
의 수를 담아서 바꿔준다.
answer
변수에는 서비스로 받은 치킨의 수를 더해서 보관해준다.
remain_sum
변수에는 남은 쿠폰의 수 remain_coupon
의 수를 더해서 보관하는데, if 문을 통해 remain_sum
이 10장 이상이면 answer
변수에 서비스 치킨 한 마리를 추가해주고, remain_sum
변수에 원래 10장의 쿠폰을 빼주어야 하지만 우리는 치킨 한마리를 또 시켰으므로 9만큼 빼준다.
- 이렇게 모든 루프를 돌면 서비스 치킨이 몇 마리인지 확인할 수 있다.
오답노트
- 서비스 치킨에도 쿠폰이 온다. 이 점이 어렵고 현실에서 이런집이 있나싶다..
- while 반복문을 잘 사용해야하는데
chicken
변수를 변경하면서 무한으로 돌리는 방법을 잘 기억하면 좋겠다.
- 남은 쿠폰으로 서비스 치킨을 주문할 때 10장 차감을 하고 1장을 더해주는 것도 기억해주어야 한다.