부족한 금액 계산하기

2023. 4. 7. 13:26스터디/ALGORITHM

부족한 금액 계산하기

코딩테스트 연습>위클리 챌린지>부족한 금액 계산하기

문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다.이 놀이기구의 원래 이용료는 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는 자연수

문제 풀이

function solution(price, money, count) {

    const costCalculater = function(i){
        // 매번 탈때마다 가격 계산기
        // 1회차 일때는 가격*1
        // 2회차 일때는 가격*2
        // n회차 일대는 가격*n
        return price*(i+1)
    }

    // 이용 회차 만큼 비용을 가지고 있는 배열
    // Array(count) - 이용 회차 만큼 배열 생성
    let costArr = Array.from(Array(count), (_,i) => costCalculater(i))
    console.log(costArr) // 비용배열 [3*1, 3*2, 3*3, 3*4]

    // 총 비용의 합
    let totSum = costArr.reduce(function(first, secound){
        return first+secound
    })
    // 총 탑승 비용의 합에서 예산을 제한 금액이 음수이면
    // 즉, 예산이 충분해서 금액이 부족하지 않으면 0 을 리턴
    // 총 탑승 비용의 합에서 예산을 제한 금액이 양수이면 (총 탑승 비용이 더 많다)
    // 총 탑승 비용 - 예산을 리턴. 부족한 금액을 알 수 있다.
    return Math.sign(totSum-money) == -1?0:totSum-money;
}
// 요금 3인 놀이기구를 4번 타는 경우, 예산은 20
console.log(solution(3,20,4))

 

코드 리뷰

  1. 변수명을 의미에 맞게 지어주세요.
  2. reduce 함수 사용 시 좀더 명확하게 사용할 것.
  3. Math.sign 함수 대신 조건문 사용
function solution(price, money, count) {

    // 가격 계산기. 1회차 일때는 가격*1, n회차 일대는 가격*n
    const costCalculater = function(i){
        return price*(i+1)
    }

    // 이용 회차 만큼 비용을 가지고 있는 배열
    // Array(count) - 이용 회차 만큼 배열 생성
    let costArr = Array.from(Array(count), (_,i) => costCalculater(i))
    console.log(costArr) // 비용배열 [3*1, 3*2, 3*3, 3*4]

    // 총 비용의 합
    let totalCost = costArr.reduce(function(first, second){
        return first+second
    })

    return totalCost-money > 0?totalCost-money:0;
}
// 요금 3인 놀이기구를 4번 타는 경우, 예산은 20
console.log(solution(3,20,4))

 

코드 리뷰 2

  1. 메모리 사용 개선 - costArr 생성 후 reduce로 총합 계산 하지말고 포문 사용 할 것
  2. 조건문을 통한 가독성 - Math.sign()을 사용하여 양수, 음수, 0판단 말고 조건문을 사용해서 명확히 표현 가능
function solution(price, money, count) {
  let totSum = 0;
  for (let i = 1; i <= count; i++) {
    totSum += price * i;
  }
  const shortage = totSum - money;
  return shortage > 0 ? shortage : 0;
}

 

참고 내용

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from

 

Array.from() - JavaScript | MDN

Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만듭니다.

developer.mozilla.org

 

'스터디 > ALGORITHM' 카테고리의 다른 글

문자열 다루기 기본  (0) 2023.04.11
나누어 떨어지는 숫자 배열  (0) 2023.04.11
2016년  (0) 2023.04.11
x만큼 간격이 있는 n개의 숫자  (0) 2023.04.11
최소직사각형  (0) 2023.04.10