본문 바로가기
DEVLOG/Algorithms

[BOJ 11047] 동전 0 파이썬 풀이

2019. 9. 3.
반응형

 

 

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

문제 해설

2019/09/03 - [DEVLOG/Algorithms] - [BOJ 11399] ATM 파이썬(Python) 풀이

 

[BOJ 11399] ATM 파이썬(Python) 풀이

11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제해설 전형적인 그리디..

deepwelloper.tistory.com

11047 동전 0 문제는 전에 포스팅했던 ATM 문제와 함께 대표적인 그리디 알고리즘 문제입니다.

그리디 알고리즘(greedy algorithm)이란 미래의 상황을 고려하지 않고, 현재 시점에서 최선의 선택을 하는 알고리즘을 말합니다.

그리디 알고리즘은 최적화된 해를 찾는다는 보장은 없습니다.

 

각 동전의 value는 오름차순으로 정렬되어 입력됩니다.

이를 내림차순으로 차례대로 K값에 각 동전이 몇개 필요한지 계산해나가면됩니다.

 

동전의 값이 K보다 작거나 같은경우에만 리스트에 포함되도록 했습니다.

코드

N, K = map(int, input().split())
value_list = []
for _ in range(N):
    value = int(input())
    if value <= K:
        value_list.append(value)

cnt = 0
for i in range(len(value_list)):
    value = value_list[(len(value_list))-i-1]
    cnt += (K // value)
    K = K%value

print(cnt)

 

좀 더 단순한 코드

n,k=map(int,input().split());c=0
for i in reversed(eval("int(input()),"*n)):c+=k//i;k=k%i
print(c)

 

반응형

댓글