본문 바로가기
나의 개발일지/알고리즘 테스트

[프로그래머스 - Level 1] 부족한 금액 계산하기 (JS)

by stella_gu 2022. 7. 16.

네...? 뭘 하라구요?

 

 

일단 for문 돌려서 놀이기구 요금 합계부터 구하고.. 가진 돈 - 요금 합계가 0보다 크면 return 요금 합 - 가진돈을 해볼게요..

 

 

function solution(price, money, count) {
    let sum = 0;
    for (let i = 0; i < count; i++ ) {
        sum += price+(price*i);
    }
    return (sum - money > 0 ? sum - money : 0);
}


let price = 3;
let money = 20;
let count = 4;
console.log(solution(price, money, count));			// 결과값 : 10




// 위의 코드 살짝 다듬음
function solution2(price, money, count) {
    let sum = 0;
    for (let i = 1; i <= count; i++ ) {
        sum += price*i;
    }
    return (sum > money ? sum - money : 0);
}

let price2 = 3;
let money2 = 20;
let count2 = 4;
console.log(solution2(price2, money2, count2));		// 결과값 : 10

요금을 count가 늘어날 때마다 더해주는 sum을 완성해서 

"sum - money > 0"가 True면 sum - money를 return해주고, False면 0을 리턴해주어 完成!

 

 

 

 

다른 사람들은 어떻게 풀었나

// 등차수열? 가우스공식?
// 1 ~ x까지의 합 n * (n + 1) / 2인데 여기에 price배 만큼 곱해주는 거니까 (앞의 식) * price

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

let price = 3;
let money = 20;
let count = 4;
console.log(solution(price, money, count));






// ..._ 는 코딩 테스트시 solution 함수에 들어오는 매개변수의 목록을 의미
// 결과적으로, 함수 몸체에서 _[0] 은 price, _[1]은 money, _[2]는 count가 됨
// Math.max 부분은 0과 우리가 계산하고자 하는 결과 둘 중에 더 큰 수를 반환하게 하여, 계산 결과가 음수인 경우, 즉 돈이 부족하지 않은 경우에는 0이 나오도록 한 것
// '++_[2]' 부분은 전위연산자로써, _[2]에 대해 먼저 +1하고 계산하는.. 즉 count+1을 의미

const solution = (..._) => Math.max(_[0]*_[2]*++_[2]/2-_[1], 0);

가우스 공식을 여기서도 쓴다고요?!

 

그냥 for문 돌릴게요..