λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
python

[μ•Œκ³ λ¦¬μ¦˜] #05 λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°-효율적인 화폐 ꡬ성

by Soo-minJeon 2022. 7. 3.

πŸ›  '효율적인 ν™”폐 κ΅¬μ„±' 문제

πŸ”§  문제 

Nκ°€μ§€ μ’…λ₯˜μ˜ 화폐가 μžˆλ‹€. 이 ν™”νλ“€μ˜ 개수λ₯Ό μ΅œμ†Œν•œμœΌλ‘œ μ΄μš©ν•΄μ„œ κ·Έ κ°€μΉ˜μ˜ 합이 M원이 λ˜λ„λ‘ ν•˜λ €κ³  ν•œλ‹€. μ΄λ•Œ 각 ν™”νλŠ” λͺ‡ κ°œλΌλ„ μ‚¬μš©ν•  수 있으며, μ‚¬μš©ν•œ ν™”νμ˜ ꡬ성은 κ°™μ§€λ§Œ μˆœμ„œλ§Œ λ‹€λ₯Έ 것은 같은 경우둜 κ΅¬λΆ„ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 2원, 3원 λ‹¨μœ„μ˜ 화폐가 μžˆμ„ λ•ŒλŠ” 15원을 λ§Œλ“€κΈ° μœ„ν•΄ 3원을 5개 μ‚¬μš©ν•˜λŠ” 것이 κ°€μž₯ μ΅œμ†Œν•œμ˜ 화폐 κ°œμˆ˜μ΄λ‹€.

 

- μž…λ ₯쑰건 

: 첫째 쀄에 N, M이 μ£Όμ–΄μ§„λ‹€(1<= N <= 100, 1 <= M <= 10,000)

: 이후 N개의 μ€„μ—λŠ” 각 ν™”νμ˜ κ°€μΉ˜κ°€ μ£Όμ–΄μ§„λ‹€. 화폐 κ°€μΉ˜λŠ” 10,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

- 좜λ ₯쑰건

: 첫째 쀄에 M원을 λ§Œλ“€κΈ° μœ„ν•œ μ΅œμ†Œν•œμ˜ 화폐 개수λ₯Ό 좜λ ₯ν•œλ‹€.

: λΆˆκ°€λŠ₯ν•  λ•ŒλŠ” -1을 좜λ ₯ν•œλ‹€.

 

μž…λ ₯μ˜ˆμ‹œ1 좜λ ₯μ˜ˆμ‹œ1
2 15
2
3
5
μž…λ ₯μ˜ˆμ‹œ2 좜λ ₯μ˜ˆμ‹œ2
3 4
3
5
7
-1

 


πŸ”§ 아이디어

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ˜ 쑰건은 λ‹€μŒκ³Ό κ°™λ‹€.

1. 큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆŒ 수 μžˆλ‹€.

2. μž‘μ€ λ¬Έμ œμ—μ„œ κ΅¬ν•œ 정닡은 그것을 ν¬ν•¨ν•˜λŠ” 큰 λ¬Έμ œμ—μ„œλ„ λ™μΌν•˜λ‹€.

 

이 λ¬Έμ œλŠ” 두 쑰건 λͺ¨λ‘ λ§Œμ‘±ν•˜λ―€λ‘œ λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° bottom-up λ°©λ²•을 톡해 κ΅¬ν˜„ν•΄λ³΄κ³ μž ν•œλ‹€.

 

1) i원일 λ•Œ

i원이 μ£Όμ–΄μ§„ 화폐 κ°€μΉ˜λ“€μ˜ λ°°μˆ˜κ°€ μ•„λ‹ˆλΌλ©΄,

즉 μž…λ ₯ μ˜ˆμ‹œ2경우λ₯Ό 보면, 4원은 3, 5, 7 쀑 μ–΄λŠ κ²ƒμ˜ λ°°μˆ˜μ—λ„ μ†ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ -1을 좜λ ₯ν–ˆλ‹€.

 

λ”°λΌμ„œ 'μ£Όμ–΄μ§„ 화폐 κ°€μΉ˜λ“€' 의 λ°°μˆ˜κ°€ μ•„λ‹ˆλΌλ©΄ 배열에 -1을 μ €μž₯ν•œλ‹€.


πŸ”§ μ½”λ“œ μž‘μ„±

n, target = map(int, input().split())

m_list = [0 for i in range(n)]
for i in range(n):
    m_list[i] = int(input())

answer_list = [ 10000 for i in range(10000)]
for i in range(1, target+1):
    for j in range(len(m_list)):
        if (i % m_list[j] == 0):
            answer_list[i] = min(answer_list[i], i//m_list[j])
            # 쀑간 μ κ²€μš© 좜λ ₯
            # print('ν˜„μž¬ κΈˆμ•‘ : ', i, ' | λ‹¨μœ„ : ', m_list[j], ' | answer_list[i] : ', answer_list[i])
    if (answer_list[i] == 10000): answer_list[i] = -1

print(answer_list[target])