logo

양꼬치

문제 설명

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 nk가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

제한 사항

  • 0 < n < 1,000
  • n / 10 ≤ k < 1,000
  • 서비스로 받은 음료수는 모두 마십니다.

입출력 예

nkresult
103124,000
646768,000

입출력 예 설명

입출력 예 #1

  • 10인분을 시켜 서비스로 음료수를 하나 받아 총 10 * 12000 + 3 * 2000 - 1 * 2000 = 124,000원입니다.

입출력 예 #2

  • 64인분을 시켜 서비스로 음료수를 6개 받아 총 64 * 12000 + 6 * 2000 - 6 * 2000 =768,000원입니다.

문제풀이 (나)

function solution(n, k) {
    return payment(n, excludeServiceDrinks(n, k));
}
 
function excludeServiceDrinks(n, k) {
    return k - Math.floor(n / 10);
}
 
function payment(n, k) {
    return n * 12_000 + k * 2_000;
}

이번 풀이는 사실 코테라는 목적보다는 유지보수를 생각하며 풀었다.

기능은 크게 두 가지로 나눌 수 있다.

  1. 양꼬치를 10개 샀을 때 서비스 음료수 1개 - excludeServiceDrinks
  2. 양꼬치와 음료수를 계산 - payment

그런데 이번 문제의 경우 제한사항에 서비스로 받은 음료수는 모두 마신다. 라고 되어 있었다.
그래서 예외처리를 따로 하지 않았는데 실 서비스에서 사용한다고 하면, 이 부분은 예외처리가 필요할 것 같다.
추가로, ES2021 에서 추가된 숫자 구분자 기능을 통해 숫자 리터럴의 가독성을 향상시켰다.

문제풀이 (다른사람)

function solution(n, k) {
    k-=~~(n/10);
    if (k < 0) k = 0;
    return n*12000+k*2000;
}

틸트 문법을 사용했다.

~ 처럼 물결표가 하나 있을 경우는 bit 반전 처럼 사용할 수 있다.

~~ 처럼 물결표가 두 개 있을 경우는 연산자로 사용되는데, Math.floor() 즉 소수점 버림 함수와 동일하게 사용된다.

레퍼런스