[프로그래머스 | Javascript] 위클리 챌린지 - 부족한 금액 계산하기

박기영·2022년 9월 14일
0

프로그래머스

목록 보기
52/159
post-custom-banner

solution

function solution(price, money, count) {
    // N번까지 사용할 때의 총 이용료
    let toUse = 0;
    
    for(let i = 1; i <= count; i++){
        let N = price * i;
        
        toUse += N;
    }
    
    // money는 내가 가진 돈
    let gap = money - toUse;
    
    // money가 사용료만큼 충분하다면 0 이상이다.
    if(gap >= 0){
        return 0;
    } else {
        return Math.abs(gap);
    }
}

간단한 문제였다.
1부터 count까지 증가시키면서 N번 사용할 때까지의 총 사용료를 구한다.
내가 가진 돈인 money와 총 사용료 toUse를 빼서
0 이상이면 이용하는데 문제가 없으므로 0,
0보다 작으면 이용하는데 문제가 있으므로 차액만큼 반환한다.

여기서 차액은 음수로 표현되기 때문에 Math.abs()를 사용해서 부호를 제거해준다.

다른 분 풀이

function solution(price, money, count) {
    const tmp = price * count * (count + 1) / 2 - money;
    return tmp > 0 ? tmp : 0;
}

문제에 주어진 예시를 보면
3,6,9,12...이런 식으로 증가하는 숫자를 더한다.
이 분은 가우스 공식을 활용하여 이를 해결하셨다.

n*(n+1) / 2

1 ~ n까지의 합을 나타내는 공식이다.
우리는 3,6,9,12...
즉 1 ~ n에 3을 곱해놓은 것과 같다.
이 분은 그 것을 표현하신 것이다. 정말 간단하게 총 합을 구하셨다.
그 외에는 필자의 로직과 같다. 조건문 처리는 삼항연산자를 사용하셨다.

아니면 등차수열의 합으로 해도 된다.

n*(a + l) / 2

n은 count
a는 첫 번째 숫자, l은 마지막 숫자를 의미한다.
예시는 3씩 증가하는 등차수열이므로, 이런 식의 표현도 가능하겠다.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글