[Python] 백준 11047: 동전 0
https://www.acmicpc.net/problem/11047
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
1차 시도
더보기
n, k = map(int, input().split())
lis = []
for i in range(n):
money = int(input())
lis.append(money)
#입력으로 받은 n개의 돈 단위를 money list에 저장
money_ans = []
s_lis = sorted(lis, reverse=True)
#내림차순으로 정렬(잔돈 최소화 위해)
for j in s_lis:
cnt = 0
while k - j >= 0:
cnt += 1
k -= j
money_ans.append(cnt)
#잔돈 계산
print(sum(money_ans))
시간 초과가 나왔다. 아마도 while 문을 줄여야 할 거 같은데...
ANS
n, k = map(int, input().split())
lis = []
for i in range(n):
money = int(input())
lis.append(money)
money_ans = []
s_lis = sorted(lis, reverse=True)
for j in s_lis:
cnt = 0
while k // j > 0:
cnt = (k//j)
k = k % j
money_ans.append(cnt)
#빼기로 길어지는 while문 나누기로 한 번에 줄였다. 몫만큼 돈 단위 수를 세고 나머지를 계속 for문에 돌려주면 된다.
print(sum(money_ans))
전형적인 그리디 알고리즘.
'알고리즘 > 백준' 카테고리의 다른 글
| [Python] 백준 2304: 창고 다각형 (0) | 2023.03.05 |
|---|---|
| [Python] 백준 24479: 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.02.21 |
| [Python] 백준 15649~15652: N과 M (0) | 2023.02.20 |
| [Python] 백준 1620: 나는야 포켓몬 마스터 이다솜 (0) | 2023.02.11 |
| [Python] 백준 2798: 블랙잭 (0) | 2023.02.09 |
TAGS.
