[ 문제 ]
https://www.acmicpc.net/problem/11047
[ 내가 푼 코드 ]
문제가 풀리기는 했으나 Greedy 알고리즘을 이용하지는 못했음
n,k = map(int,input().split())
a = []
coin = 0
for _ in range(n):
a.append(int(input()))
a.sort(reverse=True)
for i in a:
if k >= i:
if k%i ==0:
coin += k//i
break
coin += k//i
k = k%i
print(coin)
[ 해결 아이디어 ]
* 그리디(탐욕) 알고리즘
: 눈 앞의 이익만 우선 추구하는 알고리즘
( greedy : 탐욕스러운, 욕심이 많은 )
--> knapsack문제, 동전 문제(각 동전은 작은 동전의 배수)
입력에 보면 Ai는 Ai-1의 배수 라는 조건이 있다.
즉, 동전이 1, 5, 10, 50, 100 .. 이런 식으로 큰 동전은 작은 동전의 배수가 된다.
이러한 유형은 GREEDY 알고리즘으로 해결 할 수 있다.
[ 해결 코드 ]
n,k = map(int,input().split())
a = []
coin = 0
for _ in range(n):
a.append(int(input()))
a.sort(reverse=True)
# GREEDY
for i in a:
coin += k//i
k = k%i
print(coin)
[ 결과 ]
'알고리즘' 카테고리의 다른 글
[ 해시 ][ 파이썬 ] 프로그래머스 : 전화번호 목록 (1) | 2022.02.26 |
---|---|
[ 해시 ][ 파이썬 ] 프로그래머스 : 완주하지 못한 선수 (0) | 2022.02.26 |
[ greedy ][ 파이썬 ] 백준 11399 번 : ATM (0) | 2022.02.23 |
[ greedy ][ 파이썬 ] 백준 2839번 : 설탕배달 (0) | 2022.02.23 |
코딩테스트 대비 백준 사이트 이용법 (0) | 2022.02.23 |