
머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.
0 < n < 1,000
n / 10 ≤ k < 1,000
서비스로 받은 음료수는 모두 마십니다.
| n | k | result |
|---|---|---|
| 10 | 3 | 124,000 |
| 64 | 6 | 768,000 |
10인분을 시켜 서비스로 음료수를 하나 받아
총 10 * 12000 + 3 * 2000 - 1 * 2000 = 124,000원입니다.
64인분을 시켜 서비스로 음료수를 6개 받아
총 64 * 12000 + 6 * 2000 - 6 * 2000 =768,000원입니다.
function solution (n,k) {
const freeDrinks = Math.floor(n/10);
const paidDrinks = k - freeDrinks;
const total = (n * 12000) + (paidDrinks * 2000);
return total;
}
양꼬치는 10인분마다 음료수 1개를 서비스로 주기 때문에
전체 양꼬치 수 n을 10으로 나누면, 서비스로 받을 수 있는 음료 개수를 알 수 있다.
예를 들어 24인분이면 24 ÷ 10 = 2.4 이지만, 실제로 2개만 주니까 소수점 이하는 버려야 한다.
그래서 Math.floor(n / 10)을 사용해서 소수점을 내림(버림) 처리하고,
그 결과를 freeDrinks 변수에 저장한다. 즉, freeDrinks는 무료로 받은 음료수 개수다.
문제에서는 마신 음료수 개수 k가 주어지고, 서비스 음료도 포함해서 다 마셨다고 했으니까
실제로 돈을 내야 하는 음료 개수는 k - freeDrinks로 계산할 수 있다.
이 값을 paidDrinks 변수에 저장한다.
총 지불 금액은
양꼬치 가격: n * 12000
유료 음료 가격: paidDrinks * 2000
이 두 개를 더한 값이 최종 결과다.
function solution(n, k) {
k-=~~(n/10);
if (k < 0) k = 0;
return n*12000+k*2000;
}
n / 10: 양꼬치 인분 수를 10으로 나눔
→ 10인분당 음료 1개 서비스니까, 서비스 받을 음료 개수를 계산
~~(n / 10): 소수점 버림 (정수만 남김)
예: ~~(24 / 10) → ~~2.4 → 2
k -= ...
음료 총 개수 k에서 서비스 받은 음료 수만큼 빼준다
→ 즉, 돈 내야 하는 음료 수만 남기기
n = 24, k = 6
k -= ~~(24 / 10) → k = 6 - 2 → k = 4
혹시라도 서비스 받은 음료 수가 실제 k보다 많아서 음료 개수가 음수가 될 경우,
음료 값은 최소 0으로 유지
n = 100, k = 3
→ 서비스 음료는 10개, 근데 마신 건 3개
→ k = 3 - 10 = -7 → 음수 안 되게 k = 0으로 처리
양꼬치 가격 = n * 12000
유료 음료 가격 = k * 2000
두 개를 더해서 총 지불 금액 반환