프로그래머스 부족한 금액 계산하기

Updated:

문제 설명

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

입출력 예시 price(3) money(20) count(4) result(10)

문제해설

해당 금액(price)에 대해 count를 4번을 하여 3 + 6 + 9 + 12 의 총합과 본인의 금액인(money)의 차감에 대한 리턴값을 구하는 문제로 해석하였습니다.

해결방법

function solution(price, money, count) {
  let pay = [];
  for (let i = 1; i <= count; i++) {
    pay.push(i * price);
  }
  console.log(pay);
  let payment = 0;
  let final = pay.reduce((acc, cur) => (acc += cur), 0);
  const result = final - money;
  if (result < 0) {
    return 0;
  }
  return result;
}

solution(3, 20, 4);

먼저 price 인자 값에 대해서 각각 값들을 배열에 넣고 계산을 하게 했습니다. 그래서 pay라는 배열을 만들고 그 카운트 숫자만큼 곱셈을 하면 제곱이 된 값들이 배열안에 들어가고 그 배열값을 reduce를 이용하여 합쳐진 값을 도출합니다. 해당 값과 가진 돈에 대한 뺄셈을 할 때, 음수는 반환을 하면 되지 않으니 0보다 작으면 0을 리턴하게 하고 아니면 해당 뺄셈에 대한 값을 리턴 받습니다.

다른 사람의 풀이

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

  for (let i = 1; i <= count; i++) {
    answer += price * i;
  }

  return answer > money ? answer - money : 0;
}

내가 푼 문제보다 훨씬 깔끔하게 잘 푸신거 같다라는 느낌을 받았습니다. 어짜피 해당 값에 대한 카운트는 똑같은데, 굳이 배열로 뺄 필요없이 카운트에 따른 값을 받고 삼항연산자를 이용해서 해당 값이 크면 뺀 값을 리턴 받고 아니면 0을 리턴 받는다라고 결과가 나오게끔 하셨다!

배운점

처음에 연산자 활용과 문제 접근은 어렵지 않았습니다. 하지만 조금 더 간단하게 생각하고 계산하는 것은 더 훈련이 필요하다고 느꼈습니다.