λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/μ•Œκ³ λ¦¬μ¦˜

λ°±μ€€ 2839 파이썬 - 섀탕 배달 - 동적 κ³„νšλ²•

by πŸŒ»β™š 2021. 10. 5.

λ°±μ€€ 2839 파이썬

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

 

2839번: 섀탕 배달

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

www.acmicpc.net

 Nν‚¬λ‘œκ·Έλž¨μ˜ 섀탕이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 섀탕을 λ‹΄κΈ° μœ„ν•΄ 3ν‚€λ‘œκ·Έλž¨κ³Ό 5ν‚€λ‘œκ·Έλž¨ λ΄‰μ§€λ‘œ κ°€μž₯ 적은 μ–‘μ˜ 봉지λ₯Ό λ§Œλ“€μ–΄ λ‚΄λŠ” 방법을 κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 이 λ¬Έμ œλŠ” 계산 횟수λ₯Ό 쀄이기 μœ„ν•΄ 이전에 κ³„μ‚°ν–ˆλ˜ 값을 κΈ°μ–΅ν•΄λ’€λ‹€κ°€ μž¬μ‚¬μš©ν•˜λŠ” λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ ν™œμš©ν•˜λŠ” 것이 μ λ‹Ήν•˜λ‹€κ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

 

 

3 ~ Nν‚¬λ‘œκ·Έλž¨κΉŒμ§€ μž‘μ€ μˆ«μžλΆ€ν„°... 각각 κ°€μž₯ 적은 μ–‘μ˜ 봉지λ₯Ό μ €μž₯해두면... ν•΄λ‹Ή 값보닀 3, 5 큰 μœ„μΉ˜μ—μ„œ 이전 값을 μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

 

Python 풀이

import sys

read = sys.stdin.readline
N = int(read())

arr = [5001] * (N+5)
arr[3] = arr[5] = 1

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

print(arr[N] if arr[N] < 5001 else -1)
  • arr 배열은 Nν‚¬λ‘œκ·Έλž¨μΌ λ•Œ, 각각 κ°€μž₯ 적은 μ–‘μ˜ 봉지λ₯Ό 담을 μš©λ„λ‘œ μ‚¬μš©λœλ‹€.
    • μ΅œμ†Œ κ°’ κ΅¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— N의 λ²”μœ„λ³΄λ‹€ ν•˜λ‚˜ 큰 값이 "5001"을 κ°’μœΌλ‘œ μ§€μ •ν•œλ‹€. 
    • index 3, 5μ—λŠ” 각각 1개의 봉지λ₯Ό μ‚¬μš©ν•˜κ³  졜초의 κ°’μœΌλ‘œ μ΄μš©ν•˜κΈ° μœ„ν•΄ "1"을 λŒ€μž…ν•œλ‹€.
    • λ°°μ—΄μ˜ 크기λ₯Ό "N+5"둜 μž‘μ€ μ΄μœ λŠ”... N의 값이 5보닀 μž‘μ€ 경우 Index Out of Range 였λ₯˜λ₯Ό 작기 μœ„ν•΄μ„œλ‹€.
  • 배열이 5와 κ°™κ±°λ‚˜ 보닀 μž‘μ€ κ²½μš°λŠ” 이미 κ²°κ³Όκ°€ μ €μž₯λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— for문의 rangeλŠ” 6λΆ€ν„° μ‹œμž‘ν•œλ‹€.
    • 6λΆ€ν„°λŠ” ν•΄λ‹Ή μœ„μΉ˜λ³΄λ‹€ "-3", "-5"의 μœ„μΉ˜ 쀑 μž‘μ€ 값을 κ°–κ³ μ™€μ„œ 1을 λ”ν•˜λ©΄ ν•΄λ‹Ή μœ„μΉ˜μ—μ„œ κ°€μž₯ 적은 μ–‘μ˜ 봉지λ₯Ό ꡬ할 수 μžˆλ‹€. 
  • Nν‚¬λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μ—†μœΌλ©΄ arr배열값이 5000보닀 크기 λ•Œλ¬Έμ— μΉ˜ν™˜ν•΄μ„œ -1을 λ°˜ν™˜ν•œλ‹€.

 

λ°˜λ‘€

  • λ§ˆμ§€λ§‰ 좜λ ₯λΆ€λΆ„μ—μ„œ arr[N] != 5001 μ΄λŸ°μ‹μœΌλ‘œν•˜λ©΄ λ°˜λ‘€κ°€ λ°œμƒν•œλ‹€.
    • N이 7인 경우... 7-3=4, 7-5=2 --> 2, 4 λͺ¨λ‘ 5001이 기본값이기 λ•Œλ¬Έμ— 5002κ°€ λ‹΅μœΌλ‘œ λ°˜ν™˜λ  수 μžˆλ‹€.

λŒ“κΈ€