728x90
문제
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다.
이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다.
즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 반환하는 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 반환하세요.
예시
price | money | count | return |
3 | 20 | 4 | 10 |
price가 3이고 카운트가 4면 총 금액은 3 + 6 + 9 + 12인 30이 된다.
money를 20 가지고 있기 때문에 10이 모자라게 된다.
나의 풀이
function solution(price, money, count) {
let result = -money;
for (let i = 1; i <= count; i++) {
result += price * i;
}
return result > 0 ? result : 0;
}
다른 풀이
function solution(price, money, count) {
const tmp = price * count * (count + 1) / 2 - money;
return tmp > 0 ? tmp : 0;
}
풀이 방법
나의 풀이 방법
1. 결과 값을 -money로 초기값을 설정하고, price의 N배 값을 count 만큼 반복해서 더해준다.
function solution(price, money, count) {
// 1
let result = -money;
for (let i = 1; i <= count; i++) {
result += price * i;
}
}
2. money보다 result값이 큰 경우 result를 반환하고, 아닌 경우 0을 반환한다
function solution(price, money, count) {
let result = -money;
for (let i = 1; i <= count; i++) {
result += price * i;
}
// 2
return result > 0 ? result : 0;
}
다른 풀이 방법
가우스 공식을 이용해서 값을 계산한 후 money를 빼준 결과값이 0보다 크면 tmp값을 반환하고 아닌 경우 0을 반환한다.
// 가우스 공식
// 등차 수열의 합 = {(첫 항 + 마지막 항) * (항의 개수)} / 2
( a + b ) * ( b - a + 1 ) * 1/2
function solution(price, money, count) {
// 1
const tmp = price * count * (count + 1) / 2 - money;
return tmp > 0 ? tmp : 0;
}
728x90
'🧬알고리즘 > Programmers' 카테고리의 다른 글
[JavaScript] 숫자 문자열과 영단어 - 2021 카카오 채용연계형 인턴십 (2) | 2024.09.11 |
---|---|
[JavaScript] 없는 숫자 더하기 (0) | 2024.09.10 |
[JavaScript] 약수의 개수와 덧셈 (0) | 2024.09.09 |
[JavaScript] 3진법 뒤집기 (0) | 2024.08.29 |
[JavaScript] 두 개 뽑아서 더하기 (0) | 2024.08.29 |
댓글