새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price
원 인데, 놀이기구를 N 번 째
이용한다면 원래 이용료의 N배
를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count
번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.
price
: 1 ≤ price
≤ 2,500, price
는 자연수money
: 1 ≤ money
≤ 1,000,000,000, money
는 자연수count
: 1 ≤ count
≤ 2,500, count
는 자연수price | money | count | result |
---|---|---|---|
3 | 20 | 4 | 10 |
입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.
const solution = (price, money, count) => {
const result = money - Array(count).fill(0).map((_, i) => ++i * price)
.reduce((acc, curr) => acc + curr, 0);
return result <= 0 ? Math.abs(result) : 0;
}
/*
내가 처음 작성한 코드이다.
1. result라는 변수는 놀이기구를 다 타고 남은 금액을 담기 위해 만든 변수다.
2. 먼저 count만큼의 요소를 갖는 Array 생성자 함수를 사용하여 배열을 만들어준다.
3. fill 메서드를 이용하여 해당 배열을 0으로 채워준다. (배열의 요소는 현재 empty 상태이므로 채워줘야한다.)
4. map을 사용하여 가격을 구해준후 reduce로 합산해준 후 총 결과를 money에서 빼준다.
5. 조건식이 참이면(result <= 0), 부족한 돈의 절대값을 반환하고, 그렇지 않다면 0을 반환해준다.
*/
const solution = (price, money, count) => {
let result = 0;
for (let i = 1; i <= count; i++) {
result += price * i;
}
return result >= money ? result - money : 0;
}
/*
명령형 코드로 작성해보았다.
1. result라는 변수를 선언하고 0으로 초기화한다. 구매하려는 물건들의 총 가격을 저장할 것이다.
2. for문을 통해 1부터 count까지의 숫자를 반복하면서, price를 곱한 값을 result에 더해준다.
3. result와 money를 비교하여 조건식이 참이면 (result >= money) result - money를 반환하고,
그렇지 않으면 0을 반환한다.
*/