Problem Solving/[ν•­ν•΄99] TIL

99클럽 μ½”ν…Œ μŠ€ν„°λ”” 14일차 TIL / 그리디

geum 2024. 11. 10. 16:33

✏️ 문제

https://www.acmicpc.net/problem/14916

 

좘ν–₯μ΄λŠ” 편의점 μΉ΄μš΄ν„°μ—μ„œ μΌν•œλ‹€.

μ†λ‹˜μ΄ 2μ›μ§œλ¦¬μ™€ 5μ›μ§œλ¦¬λ‘œλ§Œ κ±°μŠ€λ¦„λˆμ„ 달라고 ν•œλ‹€. 2μ›μ§œλ¦¬ 동전과 5μ›μ§œλ¦¬ 동전은 λ¬΄ν•œμ • 많이 가지고 μžˆλ‹€. λ™μ „μ˜ κ°œμˆ˜κ°€ μ΅œμ†Œκ°€ λ˜λ„λ‘ 거슬러 μ£Όμ–΄μ•Ό ν•œλ‹€. κ±°μŠ€λ¦„λˆμ΄ n인 경우, μ΅œμ†Œ λ™μ „μ˜ κ°œμˆ˜κ°€ λͺ‡ κ°œμΈμ§€ μ•Œλ €μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

예λ₯Ό λ“€μ–΄, κ±°μŠ€λ¦„λˆμ΄ 15원이면 5μ›μ§œλ¦¬ 3개λ₯Ό, κ±°μŠ€λ¦„λˆμ΄ 14원이면 5μ›μ§œλ¦¬ 2κ°œμ™€ 2μ›μ§œλ¦¬ 2개둜 총 4개λ₯Ό, κ±°μŠ€λ¦„λˆμ΄ 13원이면 5μ›μ§œλ¦¬ 1κ°œμ™€ 2μ›μ§œλ¦¬ 4개둜 총 5개λ₯Ό μ£Όμ–΄μ•Ό λ™μ „μ˜ κ°œμˆ˜κ°€ μ΅œμ†Œκ°€ λœλ‹€.

 

πŸ€– μž…μΆœλ ₯ μ˜ˆμ‹œ

 

🧐 λ‚œμ΄λ„/μ†Œμš” μ‹œκ°„

βœ… λ‚œμ΄λ„: solved.ac κΈ°μ€€ S5

βœ… μ†Œμš” μ‹œκ°„: 14λΆ„

βœ… ꢌμž₯ μ‹œκ°„: 1μ‹œκ°„ 15λΆ„

 

πŸ’‘ 풀이

1) 문제 μœ ν˜• νŒŒμ•…

μ–΄μ œ 올린 TILμ—μ„œ 그리디 문제의 μ˜ˆμ‹œλ‘œ 동전 문제λ₯Ό μ–ΈκΈ‰ν–ˆλŠ”λ° 였늘 λ°”λ‘œ κ΄€λ ¨λœ λ¬Έμ œκ°€ λ‚˜μ™”λ‹€.

 

2) 아이디어 흐름

β‘  쑰건문 μ„€μ •: n이 5의 배수일 λ•Œ

5μ›μ§œλ¦¬λ₯Ό 많이 써야 동전 수λ₯Ό μ΅œμ†Œλ‘œ λ§Œλ“€ 수 있기 λ•Œλ¬Έμ— n이 5의 배수인 κ²½μš°μ™€ μ•„λ‹Œ 경우둜 쑰건을 λ‚˜λˆ΄λ‹€. n이 5의 배수면 정닡은 n을 5둜 λ‚˜λˆˆ λͺ«μ΄ λœλ‹€.

 

β‘‘ 쑰건문 μ„€μ •: n이 5의 λ°°μˆ˜κ°€ 아닐 λ•Œ

주어진 μž…μΆœλ ₯ μ˜ˆμ‹œμ²˜λŸΌ n이 5의 λ°°μˆ˜κ°€ μ•„λ‹Œ 경우λ₯Ό 잘 μ²˜λ¦¬ν•˜λŠ” 게 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•œλ‹€.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ 1이 맀우 쒋은 μ˜ˆμ‹œλΌκ³  λŠλ‚€ 게 λ‹¨μˆœνžˆ n을 5둜 λ‚˜λˆˆ λͺ«λ§Œ μƒκ°ν•œλ‹€λ©΄ 5μ›μ§œλ¦¬λ₯Ό 두 κ°œκΉŒμ§€ μ“Έ 수 μžˆμ§€λ§Œ, 5원을 두 개 μ“°λ©΄ λ‚˜λ¨Έμ§€κ°€ 2둜 λ‚˜λˆ  떨어지지 μ•Šμ•„ 거슬러 쀄 수 μ—†κ²Œ λœλ‹€.

 

κ·Έλž˜μ„œ n이 5의 λ°°μˆ˜κ°€ 아닐 λ•ŒλŠ” n을 5둜 λ‚˜λˆ΄μ„ λ•Œμ˜ λ‚˜λ¨Έμ§€κ°€ μ§μˆ˜μΈμ§€ ν™€μˆ˜μΈμ§€ ν™•μΈν•˜λŠ” 쑰건문을 좔가해쀬닀.

 

n을 5둜 λ‚˜λˆ΄μ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 짝수라면 5μ›μ§œλ¦¬λŠ” n//5κ°œκΉŒμ§€ μ‚¬μš© κ°€λŠ₯ν•˜κ³  그렇지 μ•ŠμœΌλ©΄ 5μ›μ§œλ¦¬λŠ” (n//5)-1κ°œκΉŒμ§€ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

 

β‘’ μ˜ˆμ™Έ 처리

n이 1μ΄κ±°λ‚˜ 3이면 μ–΄λ–»κ²Œ 해도 κ±°μŠ€λ¦„λˆμ„ 쀄 수 μ—†κΈ° λ•Œλ¬Έμ— 이 λ•Œλ§Œ -1을 좜λ ₯ν•΄μ£Όλ©΄ λœλ‹€. 11, 13 이런 값듀은 λͺ» 거슬러주게 μƒκ²Όμ§€λ§Œ 5, 2λ₯Ό μ‘°ν•©ν•˜λ©΄ 거슬러 쀄 수 μžˆλ‹€λŠ” 게 λ½€μΈνŠΈ

 

3) κ΅¬ν˜„

n = int(input())

answer = 0

if n == 1 or n == 3:
    answer = -1
else:
    if n%5 == 0:
        answer = n//5
    else:
        if (n%5)%2 == 0:
            q = n//5
        else:
            q = (n//5)-1
            
        answer += q
        
        n -= q*5
        
        answer += n//2

print(answer)

 

4) μ–΄λ €μ› λ˜ 점/배운 μ 

🚨 μ–΄λ €μ› λ˜ 점

  • μ—†μŒ

❗ 배운 점

  • μ˜€λŠ˜μ€ 기얡에 λ‚¨λŠ” 배운 점이 μ—†μ—ˆμŒ