ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.11.22 // Programmers_부족한 금액 계산하기
    AIL( Algorithm I Learned) 2023. 11. 22. 23:43

    ## AIL_부족한 금액 계산하기

    ***문제 설명
    새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.단, 금액이 부족하지 않으면 0을 return 하세요.


    ***제한사항
    놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
    처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
    놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수


    ***입출력 예
    price money count result
    3 20 4 10

    ***입출력 예 설명
    입출력 예 #1이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 놀이기구 이용 횟수에 따른 총 필요한 이용 금액을 계산하고, 이것을 현재 가진 금액과 비교하여 부족한 금액을 반환하는 것이 목표입니다.


    2. 문제풀이

    function solution(price, money, count) {
     let totalPrice = 0;
        for(let i = 0; i<=count; i++){
            totalPrice += price * i
        }
        return money - totalPrice > 0 ? 0: totalPrice - money
    }
    /*
    테스트 1
    입력값 〉	3, 20, 4
    기댓값 〉	10
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. totalPrice 변수를 초기화하여 놀이기구를 탈 때 필요한 총 금액을 저장합니다. 

     

    2. for 반복문을 사용하여 놀이기구를 1번부터 count 번까지 타는 경우의 총 이용 금액을 계산합니다.

     

    3. totalPrice에는 price*i를 누적하여 더합니다. 이 때, i부터 count까지 증가하면서 놀이기구를 타는 횟수를 의미합니다.

     

    4. 현재 가진 금액 money에서 totalPrice을 뺀 값이 0보다 크다면, 부족한 금액이 없으므로 0울 반환합니다. 그렇지 않으면 부족한 금액을 계산하여 반환합니다. 

     

    그러나 위의 코드 실행에는 문제가 없지만 출제자가 원하는 정답이 아니여서 수정하도록 하겠습니다. 

    totalPrice를 계산하는 부분에서 반복문의 범위가 잘못되었는데, 현재 코드에서는 0부터 count까지 반복이 실제로는 1부터 count까지 반복으로 변경해야합니다. 

    조건식 money - totalPrice > 0 일 때, 0을 반환하는 조건식을 수정해보겠습니다. 


    3. 문제풀이 코드 수정

    function solution(price, money, count) {
        let totalPrice = 0;
        for (let i = 1; i <= count; i++) {
            totalPrice += price * i;
        }
        return money >= totalPrice ? 0 : totalPrice - money;
    }
    /*
    테스트 1
    입력값 〉	3, 20, 4
    기댓값 〉	10
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. function solution(price, money, count) { ... }: solution 함수를 정의합니다. 이 함수는 놀이기구의 이용료(price), 현재 가진 금액(money), 놀이기구를 탈 횟수(count) 세 개의 파라미터를 받습니다.

     

    2.let totalPrice = 0;: totalPrice라는 변수를 선언하고 0으로 초기화합니다. 이 변수는 놀이기구를 타는 횟수에 따른 총 이용 금액을 저장할 것입니다.

     

    3. for (let i = 1; i <= count; i++) { ... }: for 반복문을 사용하여 놀이기구를 1번부터 count 번까지 타는 경우의 총 이용 금액을 계산합니다. i는 놀이기구를 타는 횟수를 의미합니다.

     

    4. totalPrice += price * i;: totalPrice에는 price * i를 더하여 놀이기구를 타는 횟수에 따른 이용 금액을 누적합니다. 이 때, price는 놀이기구의 기본 요금이고, i는 놀이기구를 타는 횟수를 의미합니다.

     

    5. return money >= totalPrice ? 0 : totalPrice - money;: 마지막으로, 현재 가진 금액(money)이 계산된 총 이용 금액(totalPrice)보다 크거나 같으면 부족한 금액이 없으므로 0을 반환합니다. 그렇지 않으면 부족한 금액을 계산하여 반환합니다. 이때 totalPrice - money는 부족한 금액을 나타냅니다.


    # 문제 풀이 주의해야 할 점

    놀이기구 이용료가 놀이기구를 타는 횟수에 따라 등차수열로 증가한다는 점입니다. 따라서 이용료를 계산할 때 이를 고려하여 총 이용 금액을 누적해야 합니다. 코드에서는 이를 반복문을 통해 처리하여 총 이용 금액을 구하고, 이를 현재 가진 금액과 비교하여 부족한 금액을 반환하는 방식을 사용하였습니다.

    # 결론: 이번 문제는 생각보다 어려웠다.....

     

     

     

     

     

     

     

Designed by Tistory.