알고리즘 문제

데일리 루틴 35번 - 부족한 금액 계산하기

nbcssw 2024. 8. 20. 18:44

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

 

프로그래머스

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

programmers.co.kr

 

 

처음에 작성한 코드

function solution(price, money, count) {
    var answer = 0;
    let firstPrice = price;

    for (let n = 1; n <= count; n++) {
        money -= price;
        if (money >= 0) {
            price += firstPrice;
        } else {
            answer = money * -1;
            break;
        }
    }

    if (money >= 0)
        answer = 0;

    return answer;
}

코드 실행은 잘 됐는데 정답 제출을 하면 대부분의 테스트에서 실패해버림

 

원인

돈이 부족한 순간에 멈추는게 아니라, count만큼 탄다고 했을 때 부족한 금액을 구하는 것이기 때문에, 돈이 부족하더라도 break하지 않고 계속 price값을 증가시켜줬어야 한다.

 

수정한 코드

function solution(price, money, count) {
    var answer = 0;
    let firstPrice = price;

    for (let n = 1; n <= count; n++) {
        money -= price;
        if (money < 0)
            answer = money * -1;
        price += firstPrice;
    }

    if (money >= 0)
        answer = 0;

    return answer;
}

 

 

 

다른 방법

돈에서 탑승 비용을 일일히 빼지 않고, 총 비용을 먼저 구한 뒤, 돈과 비교를 해서 모자란지 판단하는 방법

function solution(price, money, count) {
    var answer = 0;
    let totalPrice = 0;

    for (let n = 1; n <= count; n++) 
        totalPrice += price * n;

    return money >= totalPrice ? 0 : totalPrice - money;
}

이 편이 코드가 좀 더 깔끔한것 같다.