새로 생긴 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받음. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됨.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하는 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return.
function solution(price, money, count) {
// 총금액 구하기
let totalPrice = 0
for(let i = 1; i <= count; i++) {
totalPrice += price * i
}
// 현재 내가 가진 돈의 상태
let myPocket = money - totalPrice
// 금액이 모자라지 않을 때
if(myPocket >= 0) {
return 0
}
// 금액이 모자랄 때
else {
return Math.abs(myPocket);
}
}
function solution(price, money, count) {
const tmp = price * count * (count + 1) / 2 - money;
return tmp > 0 ? tmp : 0;
}
가우스 덧셈
이라는 개념을 활용!
1에서 n 까지의 총합은 n(n+1)/2 이다.
어렸을때 봤던 것 같기도 한데.. 기억이.. 쿨럭..
내용인즉슨
처음과 끝의 수를 더하면서 안쪽으로 들어가면 계속 같은 값이 나오는데
그 합은 n+1이고, 그 횟수는 n/2 만큼 진행됨
따라서 해당 횟수만큼의 총합은 (n+1) x n/2 가 됨
여기서 1이 최소값이고 n이 최대값이므로
위 케이스에 적용하면 count(count+1)/2 가 됨
그런데 이 문제에선는 count가 아니라 price가 계속 배수만큼 증가되고
이것을 더해주어야 하므로
price x (count + 1) x count / 2 가 되는 것임
조금 풀어서 생각해보면..
- count의 지속적 증가 : 1, 2, 3, 4, 5 ...
=> (5 + 1) x 5/2- price의 지속적 증가 : 100, 200, 300, 400, 500 ...
=> 100x(5 + 1) x 5/2