PS/백준

[ 백준 ] 5585번 : 거스름돈 - ( C++/C , JAVA/자바, PYTHON/파이썬, NODE.JS/자바스크립트 )

발효홍삼 2022. 3. 1. 21:55
728x90
  • 문제

https://www.acmicpc.net/problem/5585

 

5585번: 거스름돈

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사

www.acmicpc.net


  • 풀이법 ( 알고리즘 )

그리디 알고리즘의 기초 문제이다. 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있기 때문에 지불한 후 받을 돈에서 500엔, 100엔, 50엔, 10엔, 5엔, 1엔을 뺄 수 있을만큼 빼고 그 개수를 출력하면 될 듯하다.

 

아래 코드들을 본다면 아래로 갈 수록 코드가 깔끔해지고 있다. 여러번 문제를 풀다보니 조금 더 코드가 간결해진듯하다.


  • 풀이 - C++ ( C )
#include <iostream>

using namespace std;

int paid , cnt = 0; // paid : 타로가 이미 지불한 돈 , cnt : 잔돈의 개수

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//input
	cin >> paid;

	paid = 1000 - paid;

	//solve
	if (paid >= 500)
	{
		while (paid >= 500) {
			paid -= 500;
			cnt++;
		}
	}
	if (paid >= 100)
	{
		while (paid >= 100) {
			paid -= 100;
			cnt++;
		}
	}
	if (paid >= 50)
	{
		while (paid >= 50) {
			paid -= 50;
			cnt++;
		}
	}
	if (paid >= 10)
	{
		while (paid >= 10) {
			paid -= 10;
			cnt++;
		}
	}
	if (paid >= 5) {
		while (paid >= 5) {
			paid -= 5;
			cnt++;
		}
	}
	if (paid >= 1) {
		while (paid >= 1) {
			paid -= 1;
			cnt++;
		}
	}

	//output
	cout << cnt;

	return 0;
}
  • 풀이 - JAVA
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int paid = sc.nextInt();
		paid = 1000 - paid;
		int cnt = 0;
		
        while(paid >= 500) {
            paid -= 500;
            cnt++;
        }
		
		
        while(paid >= 100) {
            paid -= 100;
            cnt++;
        }
		
		
        while(paid >= 50) {
            paid -= 50;
            cnt++;
        }
		
	
        while(paid >= 10) {
            paid -= 10;
            cnt++;
        }
        
		
        while(paid >= 5) {
            paid -= 5;
            cnt++;
        }
		
		
        while(paid >= 1) {
            paid -= 1;
            cnt++;
        }
		
		
		System.out.println(cnt);
	}
}
  • 풀이 - PYTHON
n = int(input())
n = 1000 - n
cnt = 0

while n >= 500:
    n -= 500
    cnt+=1
while n >= 100:
    n -= 100
    cnt+=1
while n >= 50:
    n -= 50
    cnt+=1
while n >= 10:
    n -= 10
    cnt+=1
while n >= 5:
    n -= 5
    cnt+=1
while n >= 1:
    n -= 1
    cnt+=1

print(cnt)
  • 풀이 - Node.js
let m = parseInt(require("fs").readFileSync("/dev/stdin").toString());
let nowM = 1000 - m;

const coin = [500,100,50,10,5,1];
let count = 0;
for(let i = 0; i < coin.length; i++)
{
    let tmp = Math.floor(nowM / coin[i]);
    nowM -= tmp * coin[i];
    count += tmp;
}
console.log(count);
728x90