프로그래머스 lv 0 - 치킨 쿠폰
문제 설명
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- chicken은 정수입니다.
- 0 ≤ chicken ≤ 1,000,000
입출력 예chickenresult
100 | 11 |
1,081 | 120 |
입출력 예 설명
입출력 예 #1
- 100마리를 주문하면 쿠폰이 100장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
- 따라서 10 + 1 = 11 을 return합니다.
입출력 예 #2
- 1081마리를 주문하면 쿠폰이 1081장 발급되므로 서비스 치킨 108마리를 주문할 수 있습니다. 그리고 쿠폰이 1장 남습니다.
- 108마리를 주문하면 쿠폰이 108장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다. 그리고 쿠폰이 8장 남습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
- 1마리를 주문하면 쿠폰이 1장 발급됩니다.
- 가지고 있는 쿠폰이 총 10장이므로 서비스 치킨 1마리를 추가로 주문할 수 있습니다.
- 따라서 108 + 10 + 1 + 1 = 120 을 return합니다.
재귀에 익숙하지 않았기 때문에 함수를 어떻게 적어야 할지 헷갈렸다.
시키는 치킨 마리수가 int 로 입력된다.
치킨을 먹으면 1마리당 1개씩 쿠폰을 주고, 10개를 모아 서비스 치킨을 살 수 있다. 그리고 그 서비스 치킨을 시켜도 쿠폰을 하나 준다.
모든 쿠폰을 닭으로 바꾸며 주문했을때, 총주문할 수 있는 서비스 치킨의 수를 묻고 있다.
당황하지 말고 하나씩 따라가보자.
chicken을 10으로 나누면, 그 몫은 1차적으로 시킬 수 있는 서비스 치킨의 수가 된다.
나머지와 1차적으로 시킨 서비스 치킨의 수를 더해 10으로 나누면 2차적으로 시킬 수 있는 서비스 치킨의 수가 된다.
2차적으로 시킨 서비스 치킨의 수와 나머지를 더해 10으로 나누면 3차적으로 시킬 수 있는 서비스 치킨의 수가 된다.
.
.
.
몇차 까지 실행해야하는지는 알 수 없다. 하지만 chicken을 10으로 나눠 나머지와 몫을 따로 구하고,
나머지와 몫을 더해 10으로 나눠 주는 식의 연산을 반복해야한다.
즉 같은 연산을 반복하고, 그 변수 값으로 이전회차의 결과값이용해 피연산자로 계속호출함.
몫과 나머지를 반환해좋은 좋은 함수가 이미 있다. divmod(나눌값, 나누는 값)
a,b = divmod(a+b,10) a,는 나눗셈의 몫, b는 나머지가 할당되는데 그 값이 다음회차에서도 사용돼 재귀를 수행한다.
answer += a 나눗셈의 몫a는 회차가 끝날때마다 답에 더해준다.
몇차까지 할지 모르기때문에 while문으로 반복해준다. 몫이 1도 안나오면 while문을 종료한다.
변수 a 현재 갖고 있는 쿠폰의 개수.
1. 몫과 나머지를 반환해주는 함수 divmod, 재귀를 위한 while문.