-
#AIL_23.11.03 // Programmers_양꼬치AIL( Algorithm I Learned) 2023. 11. 3. 21:30
## AIL_양꼬치
***문제 설명
머쓱이네 양꼬치 가게는 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
***입출력 예 설명
입출력 예 #1
10인분을 시켜 서비스로 음료수를 하나 받아 총 10 * 12000 + 3 * 2000 - 1 * 2000 = 124,000원입니다.
입출력 예 #2
64인분을 시켜 서비스로 음료수를 6개 받아 총 64 * 12000 + 6 * 2000 - 6 * 2000 =768,000원입니다.
## solution.JavaScript
1. 문제의 접근 방식
주어진 양꼬치 개수 `n`과 음료수 개수 `k`를 이용하여 얼마를 지불해야 하는지 계산하는 문제입니다. 주어진 제한사랑에 따라 양꼬치의 가격, 음료수의 가격, 그리고 음료수 서비스와 관련된 조건을 고려해야 합니다 .
1) 먼저 양꼬치의 가격과 음료수의 가격을 계산합니다.
2) 서비스로 주어지는 음료의 개수를 고려합니다. 10인분을 먹을 때마다 음료수 1개가 서비스로 주어지므로, `n`을 10으로 나눈 몫을 구한 후, 그값에 2,000원을 곱해서 서비스 금액을 계산합니다.
3) 이후, 양꼬치와 음료수의 가격, 그리고 서비스로 받은 음료수 금액을 합산하여 총 지불해야 하는 금액을 계산합니다.
4) 계산된 총 금액을 반환합니다.
2. 문제풀이
function solution(n, k) { const a = n * 12000;//양꼬치 const b = k * 2000;//음료수 const c = Math.floor(n / 10)*2000 return a+b-c } /* 테스트 1 입력값 〉 10, 3 기댓값 〉 124000 테스트 2 입력값 〉 64, 6 기댓값 〉 768000 */
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(n, k) { k-=~~(n/10); if (k < 0) k = 0; return n*12000+k*2000; } /* 테스트 1 입력값 〉 10, 3 기댓값 〉 124000 테스트 2 입력값 〉 64, 6 기댓값 〉 768000 */
** 누적된 음료수 개수 계산 방식
위의 코드는 `k`에서 `n`을 10으로 나눈 몫(`~~(n/10)`)을 빼는 방식으로 누적된 음료수 개수를 계산합니다. 양꼬치 10인분 당 1개의 음료수가 무료로 제공되기 때문입니다.
** 총 금액 계산 방식
`n * 12,000`은 양꼬치 비용을 나타내며, `k * 2,000`은 추가 음료수 비용을 나타냅니다. 그리고 누적된 음료수 개수에서 `n`을 나누었을 때 음수가 나올 경우, 음료수를 추가로 주문하지 않는 것으로 처리합니다.
# +++틸드문법이란?
틸드()문법은 자바스크립트에서 비트 연산자 중 하나인 "비트 NOT(단항 논리 부정)"연산자입니다.
틸드() 연산자는 주어진 숫자의 비트를 반전시키고 부호 비트를 포함하여 모든 비트를 뒤집는 역할을 합니다. 이 비트 연산자를 사용하면 정수로 형변환하고 소수 부분을 제거하는 효과를 얻을 수 있습니다.
예를 들어 `~~`를 사용하여 소수 부분을 제거하고 정수로 형변환할 수 있습니다. `~~3.14`를 사용하면 3이 반환됩니다. 이는 자바스크립트에서 정수 부분만을 취하고 소수 부분을 무시하는 효과를 가지기 때문에 소수를 버릴 때 유용하게 사용됩니다.
위의 코드를 살펴보면 `k`에서 `~~(n/10)`를 빼는 부분은 `n`을 10으로 나눈 몫을 계산하고 이를 `k`에서 빼서, 서비스로 제공되는 음료수 개수를 누적으로 계산하는 역할을 합니다. 그 후, 필요한 음료수 개수를 계산하여 최종 지불 금액을 반환합니다.
#틸드 문법 기억하자!
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.09 // Programmers_중앙값 구하기 (3) 2023.11.09 #AIL_23.11.07 // Programmers_문자 반복 출력하기 (0) 2023.11.07 #AIL_23.11.03 // Programmers_배열의 평균 값 (1) 2023.11.03 #AIL_23.11.02 // Programmers_몫 구하기 (0) 2023.11.02 #AIL_23.11.02 // Programmers_나이 출력 (0) 2023.11.02