프로그래머스 위클리 챌린지 1주차 문제입니다.
이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.
코테문제를 풀어본게 처음이라 기본으로 제공되는 코드는 수정이 불가한것으로 생각해서 var answer~와 return answer부분을 그대로 살려서 반복문+조건문 형태로 풀었다.
function solution(price, money, count) {
var answer = -1;
let totalPrice=0;
for (let i = 1; i < count+1; i++){
totalPrice = totalPrice+(price*i)
if(money - (totalPrice) < 0){
answer = (money-totalPrice)*-1
} else {
answer = 0;
}
}
return answer;
}
기본 코드를 변형할 수 있다는걸 알았다면, answer에 0을 할당하고 삼항연산자를 사용해 리턴했을 것 같다.
function solution(price, money, count) {
let answer = 0;
for (let i = 1; i <= count; i++) {
answer += price * i;
}
return answer > money ? answer - money : 0;
}
다른 사람의 풀이를 보니 이런게 있었는데, 단 두줄로 해결한것이 인상깊었다. 댓글을 보니 가우스 공식이라고한다. 1부터 100까지의 총합을 구할때, 1+100 = 101, 2+99 =101.. 첫값과 끝값의 합이 모두 동일함으로 101×50을 하는 그 공식?!
3(price) 4(count) 5(count+1) / 2 = 30(totalCount) 가 되고, 20(money)를 그 뒤에 빼주었다. 이런 생각을 할 수 있는 날이 속히 오길!
function solution(price, money, count) {
const tmp = price * count * (count + 1) / 2 - money;
return tmp > 0 ? tmp : 0;
}