[λ°±μ€] 17212λ² - λ¬λλΌ ν λΌλ₯Ό μν ꡬ맀λκΈ μ§λΆ λμ°λ―Έ (C++)
17212λ²: λ¬λλΌ ν λΌλ₯Ό μν ꡬ맀λκΈ μ§λΆ λμ°λ―Έ
λ¬λλΌ ν λΌλ€μ΄ μ¬μ©νλ ννλ λμ λΏμ΄λ€. λμ μ μ’ λ₯λ 1μ, 2μ, 5μ, 7μ μ΄λ κ² 4μ’ λ₯κ° μλ€. 물건μ μ¬κ³ λμ μΌλ‘ κ³μ°μ νλλ° λμ μ κ°μκ° μ΅μκ° λλλ‘ μ§λΆνμ§ μλ κ²μ
www.acmicpc.net
λ¬Έμ
λ¬λλΌ ν λΌλ€μ΄ μ¬μ©νλ ννλ λμ λΏμ΄λ€. λμ μ μ’ λ₯λ 1μ, 2μ, 5μ, 7μ μ΄λ κ² 4μ’ λ₯κ° μλ€. 물건μ μ¬κ³ λμ μΌλ‘ κ³μ°μ νλλ° λμ μ κ°μκ° μ΅μκ° λλλ‘ μ§λΆνμ§ μλ κ²μ λΆλ²μ΄λ€. μλ₯Ό λ€μ΄, 17μμ μ§λΆν λ 7μμ§λ¦¬ λμ 1κ°μ 5μμ§λ¦¬ λμ 2κ°λ‘ μ§λΆν΄μΌ ν©λ²μ΄κ³ , 7μμ§λ¦¬ λμ 2κ°μ 2μμ§λ¦¬ λμ 1κ°, 1μμ§λ¦¬ λμ 1κ°λ‘ μ§λΆν΄λ 17μμ΄ λμ§λ§, μ΄ λμ μ κ°μκ° 4κ°κ° λμ΄ μ΅μ κ°μκ° μλλ―λ‘ λΆλ²μ΄λ€.
μ§λΆ κΈμ‘μ μ λ ₯λ°μ ν©λ²μ΄ λλ λμ κ°μλ₯Ό μΆλ ₯μΌλ‘ λ΄μ΄μ£Όλ νλ‘κ·Έλ¨μ μμ±ν΄λ³΄μ.
μ λ ₯
첫 λ²μ§Έ μ€μ λ¬λλΌ ν λΌκ° μ§λΆν΄μΌνλ κΈμ‘ N(0 ≤ N ≤ 100,000)μ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
첫 λ²μ§Έ μ€μ λ¬λλΌ ν λΌκ° ν©λ²μ μΌλ‘ λΌ μ μλ λμ μ κ°μλ₯Ό μΆλ ₯νλ€.
ννΈ
μ§λΆ κΈμ‘ | ν©λ² μ§λΆ | λΆλ² μ§λΆ(μ) |
12μ | 7μ x 1κ° + 5μ x 1κ° | 5μ x 2κ° + 2μ x 1κ° |
17μ | 7μ x 1κ° + 5μ x 2κ° | 7μ x 2κ° + 2μ x 1κ° + 1μ x 1κ° |
21μ | 7μ x 3κ° | 7μ x 2κ° + 5μ x 1κ° + 2μ x 1κ° |
νμ΄κ³Όμ
ν΄λΉλ¬Έμ λ dpλ‘ μ κ·Όν΄μ ν μ μμλ€.
λ¬Έμ μμ μ 곡νλ λμ μ μ΅λκ°μ 7μμ΄λΌ 0 ~ 7μμ κ²½μ° λμ€λ λμ μ μλ₯Ό λͺ¨λ ꡬνκ³ 7μ μ΄μμ κ°λ€μ
dp(coin - 7) dp(coin - 5) dp(coin - 2) dp(coin - 1) μ€ κ°μ₯ μμ κ°μ ꡬνκ³ κ·Έ κ°μ + 1μ ν΄μ£Όλ νμμΌλ‘ λ¬Έμ νμ΄λ₯Ό μ§ννμμ΅λλ€.
code
#include <iostream>
#include <algorithm>
int f[100001];
int dp(int coin)
{
if (coin == 0) return (0);
if (coin == 1) return (1);
if (coin == 2) return (1);
if (coin == 3) return (2);
if (coin == 4) return (2);
if (coin == 5) return (1);
if (coin == 6) return (2);
if (coin == 7) return (1);
if (f[coin]) return (f[coin]);
int min = std::min(std::min(std::min(dp(coin - 7), dp(coin - 5)), dp(coin - 2)), dp(coin - 1)) + 1;
return (f[coin] = min);
}
int main(void)
{
int n;
std::cin >> n;
std::cout << dp(n);
return (0);
}
νκΈ°
머리λ‘λ μ΄ν΄κ°λμ§λ§ μ΄λ»κ² μ νμμ μΈμμΌν μ§ μκ·Ό κ³ λ―Όμ λ§μ΄νλ λ¬Έμ μλ κ±° κ°λ€.
μνμ μΈ κ°λ μ μ‘°κΈ λ 곡λΆλ₯Ό λ§μ΄ν΄μΌν κ±° κ°λ€.