알고리즘, CS

[프로그래머스 Lv. 1] 부족한 금액 계산하기

차돌박이츄베릅 2023. 8. 4. 09:29

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/82612

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

2. 나의 풀이

function solution(price, money, count) {
    for (let i = 0; i < count+1; i++) {
        money -= price * i
    }

    return money >= 0 ? 0 : Math.abs(money);
}

 

 

3. 다른 사람 풀이

프로그래머스의 다른 사람의 풀이를 분석함

 

case 1) 가우스 공식

??

가우스가 뭔데

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

 

case 2) 위 가우스 공식에서 Math.max로 더 큰 수를 반환

즉, 돈이 부족하지 않은 경우에는 0이 나오도록 한 것

const solution = (price, money, count) => Math.max (price*count*(count+1)/2-money, 0)

 

 

4. 배운 점

가우스 공식 배울 예정

 

메모)

삼각형 면적 구한다고 생각하면 쉬워요. 밑변 x 높이 / 2 하는 거죠. price * count가 밑변, count가 높이인 직각 삼각형인 거죠. 그런데 쌓여진 블록들은 정사각형이니 대각선이 지나가면서 네모난 블록을 정확히 반을 자르게 돼요. 그 반만큼 잘려진 걸 모아보면 한 줄의 반인 거죠. 그래서 그걸 보상 받기 위해 한 줄을 더 높게 해주고 반으로 나누죠. 밑변 * (높이 + 1) / 2