• TOC {:toc}

이 글은 백준 온라인 저지의 5585번 문제를 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2021.07.12 (Python)

메모리 시간 코드 길이
29200 KB 64 ms 158 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 09:53:39 09:54:32
풀이 생각 09:54:33 09:54:54
코딩 09:54:55 09:57:45
charge = 1000 - int(input())
count = 0
for coin in [500, 100, 50, 10, 5, 1]:
    num = charge // coin
    count += num
    charge -= coin * num

print(count) 

아이디어 & 풀이

가장 적은 수의 거스름돈을 내기 위해서는 액수가 큰 잔돈으로 낼 수 있는 최대의 금액을 치러야 한다.

  • 500엔부터 내림차순으로 잔돈을 순회하면서
  • 나눈 몫을 개수에 더하고
  • 해당 금액을 내야 할 금액에서 빼주면 된다.

2022.04.06 (JS)

메모리 시간 코드 길이
9600 KB 120 ms 354 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 03:00:42 03:01:25
풀이 생각 03:01:26 03:01:47
코딩 03:01:48 03:05:23
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim();

function main() {
    let count = 0;
    units.forEach((unit) => {
        count += parseInt(money / unit);
        money = money % unit;
    });

    return count;
}

const units = [500, 100, 50, 10, 5, 1];
let money = 1000 - parseInt(input);
console.log(main());