https://www.acmicpc.net/problem/5585
5585번: 거스름돈
타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사
www.acmicpc.net
🔷 알고리즘 분류 - 그리디 알고리즘 난이도 - 브론즈 2
그리디 알고리즘(Greedy Algorithm)은 매 순간 최적이라고 생각되는 결정을 하는 방식으로 문제를 해결하는 알고리즘입니다.
이 때문에 그리디 알고리즘은 '탐욕적'이라는 뜻의 '그리디'라는 이름이 붙었습니다.
그리디 알고리즘이 작동하는 기본 원리는 간단합니다. 매 순간 최선의 선택을 하면서 전체 문제의 해결책을 찾아나갑니다.
이 때문에 그리디 알고리즘은 많은 종류의 최적화 문제에 효율적으로 사용될 수 있습니다.
그러나 그리디 알고리즘은 '항상 최적의 해결책을 보장하는가?'라는 중요한 질문에 대한 답이 '아니요'일 수 있다는 점에서 주의할 필요가 있습니다.
그리디 알고리즘은 그 자체로 국소적인 최적해를 찾는 데는 탁월하지만, 이가 반드시 전체적인 최적해를 보장하진 않습니다.
🔶문제 풀이 - 그리디 알고리즘을 이용한 풀이
# 사용자로부터 입력값을 정수형태로 받아 'n'에 저장합니다.
n=int(input())
# 거스름돈의 개수를 저장할 변수 'count'를 0으로 초기화합니다.
count=0
# 1000원에서 사용자가 지불할 금액 'n'을 빼서 거스름돈 'm'을 계산합니다.
m=1000-n
# 동전의 종류를 큰 단위부터 순서대로 확인하며 거스름돈 'm'을 만드는 과정을 반복합니다.
for i in [500,100,50,10,5,1]:
# 'm'을 현재 동전 'i'로 나눈 몫을 'count'에 더합니다.
# 이는 'm'을 현재 동전 'i'로 얼마나 나눌 수 있는지, 즉 현재 동전 'i'가 얼마나 필요한지를 나타냅니다.
count+=m//i
# 'm'을 현재 동전 'i'로 나눈 후의 나머지를 'm'에 저장합니다.
# 이는 'm'을 현재 동전 'i'로 나눈 후 남은 금액을 나타냅니다.
m%=i
# 거스름돈의 개수인 'count'를 출력합니다.
print(count)
🔶문제 이해하기
아래와 같이 입력값이 주어졌다고 가정해 보겠습니다.
380
1. m(1000-n)은 620이 됩니다.
2. for문을 수행하면서 현재 동전 i로 나눈 값을 count에 더합니다.
3. count는 i값이 500일 때 count+=1, m은 620-500인 120이 됩니다.
4. i값이 100일 때 count+=1, m은 120-100인 20이 됩니다.
5. 10일 때 count+=2, 따라서 count는 4가 됩니다.
6. 아래와 같이 출력값을 출력하고 종료합니다.
4
'백준 알고리즘' 카테고리의 다른 글
백준 - 14938번 서강드라운드 문제풀이 [Hellfer] (2) | 2023.12.30 |
---|---|
백준 - 2458번 키 순서 문제풀이 [Hellfer] (2) | 2023.12.29 |
백준 - 1389번 케빈 베이컨의 6단계 법칙 문제풀이 [Hellfer] (0) | 2023.12.28 |
백준 - 2217번 로프 python 문제풀이 [Hellfer] (0) | 2023.12.26 |
백준 - 10162번 전자레인지 python 문제풀이 [Hellfer] (0) | 2023.12.25 |
백준 - 17626번 Four Squares python 문제풀이 [Hellfer] (2) | 2023.12.23 |
백준 - 9461번 파도반 수열 python 문제풀이 [Hellfer] (2) | 2023.12.22 |
백준 - 11051번 이항 계수 2 python 문제풀이 [Hellfer] (2) | 2023.12.21 |