- λͺ»νμλ λ¬Έμ .
- costκ° μ μ wall μμΌλ‘ μ λ ¬νμ¬ μκ°μ ν©μ΄ λλ¨Έμ§ arrayμ κΈΈμ΄μ κ°κ±°λ 컀μ§λ κΉμ§ costλ₯Ό λνλ λ°©μμΌλ‘ ꡬνμμΌλ μ€ν¨.
- μν©μ λ°λΌμλ costκ° λμ§λ§ timeλ λμμ νλλΌλ λ paid painterλ₯Ό μ¬μ©νλ κ²½μ°κ° μ 리ν μ μκΈ° λλ¬ΈμΈ κ²μΌλ‘ 보μΈλ€.
- DPμμ μ΄λ €μ΄ λΆλΆμ μ΄λ€ κ²μ memoization ν μ§ μμλ΄λ λΆλΆμΈ κ² κ°λ€.
- μ²μ indexλΆν° λκΉμ§ νμν΄λκ°λ©° μ΅μμ costλ₯Ό μ°Ύλλ€.
- νμ¬ indexλ₯Ό μ νν κ²½μ° costλ λ€μ λ κ°μ ν©μ΄λ€.
- νμ¬ indexμ cost
cost[i]
- λ€μ index
i + 1
λ₯Ό νμνμ¬ κ²°μ λ cost (λ¨, μ΄λ―Έ μΉ ν΄μ§ λ²½μ μ«μλ painted + 1 + time[i]
λ‘ μ ν΄μ§λ€) 1
μ νμ¬ μ νλ λ²½μ ν΄λΉλλ μ«μtime[i]
μ νμ¬ μ νλ λ²½μ μΉ νλ μκ°μΌλ‘ ν΄λΉ μκ° λμ free painterκ° μΆκ°λ‘ λ²½μ μΉ ν μ μλ€
- νμ¬ indexλ₯Ό μ ννμ§ μλ κ²½μ° costλ λ€μ κ°μ΄ λλ€.
- λ€μ index
i + 1
λ₯Ό νμνμ¬ κ²°μ λ cost (λ¨, μ΄λ―Έ μΉ ν΄μ§ λ²½μ μ«μλ painted
λ‘ μ ν΄μ§λ€) - νμ¬ λ²½μ paid painterκ° μΉ νμ§ μκΈ°λ‘ νμΌλ―λ‘ μΉ ν΄μ§ λ²½μ μ«μ
painted
λ λ³ν¨μ΄ μλ€.
class Solution {
public:
int paintWalls(
vector<int>& cost, vector<int>& time,
vector<vector<int>>& dp,
int i, int painted) {
if (painted >= cost.size()) return 0;
if (i >= cost.size()) return 1e9;
if (dp[i][painted] != -1) return dp[i][painted];
int choose = cost[i] +
paintWalls(cost, time, dp, i + 1, painted + 1 + time[i]);
int notChoose = paintWalls(cost, time, dp, i + 1, painted);
return dp[i][painted] = min(choose, notChoose);
}
int paintWalls(vector<int>& cost, vector<int>& time) {
vector<vector<int>> dp(
cost.size(), vector<int>(cost.size() + 1, -1));
return paintWalls(cost, time, dp, 0, 0);
}
};