[JS] LV.1 부족한 금액 계산하기

은비·2023년 11월 20일
1

Programmers_CodingTest

목록 보기
62/72
post-thumbnail

문제 설명

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

입출력 예

pricemoneycountresult
320410

입출력 예 설명

입출력 예 #1

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


✍ SOLUTION1

const solution = (price, money, count) => {
    const result = money - Array(count).fill(0).map((_, i) => ++i * price)
									.reduce((acc, curr) => acc + curr, 0);
    return result <= 0 ? Math.abs(result) : 0;
}

/*
내가 처음 작성한 코드이다.

1. result라는 변수는 놀이기구를 다 타고 남은 금액을 담기 위해 만든 변수다.
2. 먼저 count만큼의 요소를 갖는 Array 생성자 함수를 사용하여 배열을 만들어준다.
3. fill 메서드를 이용하여 해당 배열을 0으로 채워준다. (배열의 요소는 현재 empty 상태이므로 채워줘야한다.)
4. map을 사용하여 가격을 구해준후 reduce로 합산해준 후 총 결과를 money에서 빼준다.
5. 조건식이 참이면(result <= 0), 부족한 돈의 절대값을 반환하고, 그렇지 않다면 0을 반환해준다.
*/

✍ SOLUTION2

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

/*
명령형 코드로 작성해보았다.

1. result라는 변수를 선언하고 0으로 초기화한다. 구매하려는 물건들의 총 가격을 저장할 것이다.
2. for문을 통해 1부터 count까지의 숫자를 반복하면서, price를 곱한 값을 result에 더해준다.
3. result와 money를 비교하여 조건식이 참이면 (result >= money) result - money를 반환하고, 
그렇지 않으면 0을 반환한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글