λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
"곡뢀" π‘Ÿπ‘’π‘π‘œπ‘Ÿπ‘‘/π΄π‘™π‘”π‘œπ‘Ÿπ‘–π‘‘β„Žπ‘š

[Python/λ°±μ€€] 11047 : [그리디 μ•Œκ³ λ¦¬μ¦˜] 동전 0

by ΰ·† Yoni ΰ·† 2022. 1. 20.
728x90

11047 : [그리디 μ•Œκ³ λ¦¬μ¦˜] 동전 0

μ‹œκ°„ μ œν•œ: 1 Sec  λ©”λͺ¨λ¦¬ μ œν•œ: 256 MB

 

 

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

 

 

문제 μ„€λͺ…

μ€€κ·œκ°€ 가지고 μžˆλŠ” 동전은 총 Nμ’…λ₯˜μ΄κ³ , 각각의 동전을 맀우 많이 가지고 μžˆλ‹€.
동전을 적절히 μ‚¬μš©ν•΄μ„œ κ·Έ κ°€μΉ˜μ˜ 합을 K둜 λ§Œλ“€λ €κ³  ν•œλ‹€.
μ΄λ•Œ ν•„μš”ν•œ 동전 개수의 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 Nκ³Ό Kκ°€ 주어진닀. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 λ™μ „μ˜ κ°€μΉ˜ Aiκ°€ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 주어진닀.
(1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 κ²½μš°μ— AiλŠ” Ai-1의 배수)

좜λ ₯

첫째 쀄에 K원을 λ§Œλ“œλŠ”λ° ν•„μš”ν•œ 동전 개수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

μž…λ ₯ μ˜ˆμ‹œ

10 4200
1
5
10
50
100
500
1000
5000
10000
50000

좜λ ₯ μ˜ˆμ‹œ

6

My μ½”λ“œ

# N: 동전 μ’…λ₯˜ 수
# K: 동전 κ°€μΉ˜ ν•©(총 κΈˆμ•‘)
# sum: ν•„μš”ν•œ 동전 개수(κ²°κ³Όκ°’)

sum = 0
coins = []

# N, K μž…λ ₯ λ°›κΈ°
N, K = map(int, input().split())

# 동전 μ’…λ₯˜ N개 만큼 μž…λ ₯ λ°›κΈ°
for i in range(N):
    coin = int(input())
    coins.append(coin)

# μž…λ ₯ 받은 동전 μ’…λ₯˜ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ 뒀집기
coins = sorted(coins, reverse=True)

for i in coins:
    if K / i >= 1: # 총 κΈˆμ•‘μ„ ν˜„μž¬ λ™μ „μœΌλ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œ 1 이상이면
        sum += int(K / i) # 동전 개수 카운트
        K = K % i # Kλ₯Ό λ‚˜λ¨Έμ§€ κΈˆμ•‘μœΌλ‘œ λ°”κΏ”μ£ΌκΈ°

# ν•„μš”ν•œ 동전 개수의 μ΅œμ†Ÿκ°’ 좜λ ₯
print(sum)
728x90

λŒ“κΈ€