λ°±μ€ 2839 νμ΄μ¬
https://www.acmicpc.net/problem/2839
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κ° λ΅μΌλ‘ λ°νλ μ μλ€.
λκΈ