🧩 Problem Solving/[λ°±μ€€]

[λ°±μ€€] 2839 섀탕 배달 (feat.DP) (python 파이썬)

μ œλ΄‰μ•„ 2023. 8. 20. 07:57
 

2839번: 섀탕 배달

μƒκ·Όμ΄λŠ” μš”μ¦˜ 섀탕곡μž₯μ—μ„œ 섀탕을 λ°°λ‹¬ν•˜κ³  μžˆλ‹€. μƒκ·Όμ΄λŠ” μ§€κΈˆ μ‚¬νƒ•κ°€κ²Œμ— 섀탕을 μ •ν™•ν•˜κ²Œ Nν‚¬λ‘œκ·Έλž¨μ„ 배달해야 ν•œλ‹€. 섀탕곡μž₯μ—μ„œ λ§Œλ“œλŠ” 섀탕은 봉지에 담겨져 μžˆλ‹€. λ΄‰μ§€λŠ” 3ν‚¬λ‘œκ·Έ

www.acmicpc.net


섀탕 Nν‚¬λ‘œκ·Έλž¨μ„ μ£Όκ³  이걸 5ν‚¬λ‘œκ·Έλž¨, 3ν‚¬λ‘œκ·Έλž¨ λ΄‰μ§€λ‘œ κ°€μž₯ 적은 개수둜 λ‚˜λˆ„λŠ” 문제. μ²˜μŒμ—λŠ” μˆ˜ν•™μœΌλ‘œ ν•΄κ²°ν•˜λ €λ‹€κ°€ "동전" λ¬Έμ œκ°€ μƒκ°λ‚˜μ„œ DP둜 ν•΄κ²°ν–ˆλ‹€. 


아이디어

nν‚¬λ‘œκ·Έλž¨μ€ (n - 3) + 3 λ˜λŠ” (n - 5) + 5둜 생각할 수 μžˆλ‹€.

λ”°λΌμ„œ nν‚¬λ‘œκ·Έλž¨μ˜ 봉지 κ°œμˆ˜λŠ” n - 3κ³Ό n - 5 ν‚¬λ‘œκ·Έλž¨ 봉지 개수 쀑 μž‘μ€ κ±°(min) + 1이 λœλ‹€.

 

이 μ•„μ΄λ””μ–΄λ‘œ ν•΄κ²°ν•˜λ €λ©΄ n - 3κ³Ό n - 5의 개수 정보λ₯Ό μ €μž₯ν•΄ λ’€λ‹€κ°€ μž¬μ‚¬μš©μ΄ ν•„μš”ν•˜λ‹€.

3 ~ nν‚¬λ‘œκ·Έλž¨κΉŒμ§€ λ΄‰μ§€μ˜ μ΅œμ†Œ 개수λ₯Ό 담을 리슀트λ₯Ό μ„ μ–Έν•΄μ„œ ν•΄κ²°ν•˜λ©΄ λœλ‹€(DP).


전체 μ½”λ“œ

N = int(input())

INF = int(10e9)
DP = [INF] * (5001)

DP[3] = 1
DP[5] = 1

for i in range(6, N + 1):
        DP[i] = min(DP[i - 3], DP[i - 5]) + 1

if DP[N] < INF:
    print(DP[N])
else:
    print(-1)

μ½”λ“œ μ„€λͺ…

μ•Œκ³ λ¦¬μ¦˜μ€ 아이디어 μ„€λͺ…κ³Ό κ°™λ‹€.

min λ©”μ„œλ“œλ₯Ό μ“°κΈ° μœ„ν•΄ 리슀트λ₯Ό INFκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•΄ μ€€λ‹€.

 

예λ₯Ό λ“€μ–΄ N = 10이면 DP[7]κ³Ό DP[5]λ₯Ό λΉ„κ΅ν•œλ‹€. μ΄λ•Œ λ΄‰μ§€λ‘œ 7 ν‚¬λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” κ²½μš°λŠ” μ—†μœΌλ‹ˆκΉŒ DP[7] = INF,

λ”°λΌμ„œ DP[10] = DP[5] + 1이 λœλ‹€.

 

 

λ§ˆμ§€λ§‰ 좜λ ₯ν•  λ•Œ DP[N]값이 INF보닀 크면 -1, μž‘λ‹€λ©΄ DP[N]값을 좜λ ₯ν•΄ μ€€λ‹€.