최소지폐 잔돈 계산기 js

ㄷr r요·2023년 10월 26일

테스트로 출제되어 풀어 본 문제인데
간단해보이지만 계산이 필요했다.

문제 설명

  • 1000원을 가지고 편의점에서 물건을 사려고 한다.
  • 편의점에는 500원, 100원, 50원, 10원이 충분히 있고, 편의점 직원은 언제나 거스름돈 개수가 가장 적게 잔돈을 준다.
  • 편의점에서 물건을 사고 1000원 지폐 한 장을 냈을 때, 받을 잔돈의 개수를 구하는 프로그램을 작성하여라.
    (단, 물건의 가격은 10원 이상 1000원 미만이며, 1원 단위는 고려하지 않는다.)

입력 - 출력 예시

900 - 1
550 - 5
320 - 6
160 - 8

나의 답안

나는 테스트를 최대한 풀어내는 것에 집중해서
간단하고 기본적인 코드를 짜려고 했다.

function solution(num){
	let answer = 0;
    let money = 1000 - num;

    let x = Math.floor(money/500);
    money = money - x * 500;

    let y = Math.floor(money/100);
    money = money - y * 100;

    let z = Math.floor(money/50);
    money = money - z * 50;

    let j = Math.floor(money/10);
    money = money - j * 10;

	answer = x + y + z + j;
	return answer;
}
let num1 = 160;
console.log(solution(num1))

단위가 큰 액수부터 차례로 계산하면서 내려오는 방식
직관적이지만 반복이 많고 겹치는 내용이 많이 나와서 아쉬운 코드다.
네이밍도 시간들이고 싶지 않아서 대충 알파벳으로 변수를 정했다 ㅎㅎ;
반환값은 잘 나오기 때문에 이렇게 제출했지만
다른 코드들도 살펴봤다.

다른 답안

function solution(num) {
  let leftMoney = 1000 - num;
  let change = [500, 100, 50, 10];
  let count = 0;
  let i = 0;
  while (leftMoney !== 0) {
    leftMoney %= change[i];
    count += Math.floor(leftMoney / change[i]);
    i++;
  }
  return count;
}

잔돈 단위를 change 변수에 배열로 만들어 준게 포인트
그리고 change 요소들을 하나씩 반복문을 돌려 남은 돈에서 요소로 나눈 나머지를 남기고
나눈 몫은 count에 더해서 갯수를 더한 코드이다.
두 코드 다 쓸 줄 알게 되면 좋겠다^-^

profile
개발 공부

0개의 댓글