문제 설명
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
chicken은 정수입니다. 0 ≤ chicken ≤ 1,000,000
풀이
주어진 치킨 숫자를 주문하려면 쿠폰 포함해서 몇마리를 구하는 문제가 아니라
그냥 주어진 치킨 만큼을 시켰을때 서비스치킨의 수를 구하는 문제다.
한가지 추가 조건은 서비스 치킨을 시켜도, 10마리 마다 쿠폰 1장이 발급되는 파격 조건이 붙어있다.
즉 100마리를 시키면 -> 쿠폰 100장 -> 치킨 10마리 주문 -> 쿠폰 10장 -> 쿠폰 1장
이런식으로 11마리의 치킨을 얻을 수 있다.
쿠폰을 변수로 만들어 두고 쿠폰이 10개 미만이 될때 까지 while 문을 이용해보자.
const solution = (chicken) => {
let coupon = chicken; // 첫 주문으로 얻은 쿠폰으로 지정
let serviceChicken = 0; // 서비스로 받은 치킨의 수를 구해야 하므로 변수 지정
while(coupon >= 10){ // 쿠폰이 10 이상이면 반복
let amountChicken = Math.trunc(coupon/10); // 쿠폰으로 주문 가능한 치킨의 수
coupon %= 10; // 10개 단위의 쿠폰을 쓰고 남은 쿠폰
serviceChicken += amountChicken; // serviceChicken에 주문한 치킨 더하기
coupon += Math.trunc(amountChicken); // 주문한 치킨만큼 쿠폰 추가
}
return serviceChicken;
}
PS
다른 사람의 풀이를 봤는데,
function solution(chicken) {
var answer = parseInt((chicken-1) / 9);
return answer;
}
이렇게 끝낸분이 계셨다.
왜 저렇게 되는지 이해 못하겠다.
수학 공식같은건가..