λ¬Έμ λ§ν¬
https://programmers.co.kr/learn/courses/30/lessons/42897
λλμ΄ μνμΌλ‘ λ°°μΉλμ΄μλ μ§μ νΈ λ, νΈκ³ μνλ μ§κ³Ό μΈμ ν μ§μ νΈμ§μλλ€. μ΄λ λλμ΄ νμΉ μ μλ λμ μ΅λκ°μ 리ν΄νλ λ¬Έμ .
νμ΄
λ¨Όμ μ°λ¦¬κ° κ°μ₯ κ°λ¨νκ² λ μ¬λ¦΄ μ μλ λ°©λ²μ μ§μ ν°λ λͺ¨λ κ²½μ°μ μλ₯Ό λ€ λ μ¬λ €λ³΄λ λ°©λ²μ΄λ€.
νμ§λ§ μ§μ μ΅λ 1000000κ°κ° μμ μ μμΌλ―λ‘ 1000000κ°μ μ§ μ€μ μ΄μνμ§ μκ³ 1κ°λΆν° μ΅λ 500000κ°μ μ§μ μ ννλ κ²½μ°μ μλ₯Ό λͺ¨λ λ€ λ°μ Έλ΄μΌνκΈ° λλ¬Έμ μμ²λ μκ°μ΄ μμλλ€.
λ°λΌμ μ΄ λ°©λ²μ μκ°μ΄κ³Ό μ€λ₯κ° λ κ²μ΄λ€.
κ·Έλ λ€λ©΄ DPλ₯Ό μ΄μ©ν΄μ μ΅μ μ κ°μ μ°Ύλ λ°©λ²μ΄ μλ€.
μ΄λ DPλ°°μ΄μ μΈλ±μ€λ μ§μ λ²νΈλ₯Ό μλ―Έν κ²μ΄λ€.
νμ§λ§ μ΄μν μ§μ νμΉ μ μλ€λ μ‘°κ±΄μ΄ μμΌλ―λ‘ μ΄μ μ μ§μ λ°©λ¬Ένλμ§ μ¬λΆλ μ€μνλ€.
λ°λΌμ DPλ°°μ΄μ DP[λλμ΄ λ°©λ¬Ένλμ§ μ¬λΆ][μ§μ λ²νΈ] μ΄λ κ² λ§λ€ μ μλ€.
λλμ΄ λ°©λ¬Ένλμ§μ μ¬λΆλ 0, 1λ‘ νννλ€.
μ΄κ²μ λ°νμΌλ‘ μ νμμ μΈμ보면
DP[ 1 ][ i ] = DP[ 0 ][ i - 1 ] + money[ i ] κ° λλ€. (iλ²μ§Έ μ§μ λ°©λ¬Έν κ²½μ°)
=> iλ²μ§Έ μ§μ λ°©λ¬Ένλ €λ©΄ i - 1λ²μ§Έ μ§μ λ°©λ¬Έμ νμ§ μμμ΄μΌνλ€.
DP[ 0 ][ i ] = max( DP[ 0 ][ i - 1 ] , DP[ 1 ][ i - 1 ] ) κ° λλ€. (iλ²μ§Έ μ§μ λ°©λ¬Ένμ§ μμ κ²½μ°)
=> iλ²μ§Έ μ§μ λ°©λ¬Ένμ§ μμμ κ²½μ° νμΉ μ μλ μ΅λ κΈμ‘μ i - 1λ²μ§Έ μ§μ λ°©λ¬Ένκ±°λ λ°©λ¬Ένμ§ μμ 2κ°μ§ κ²½μ° μ€ ν° κ°κ³Ό κ°λ€.
μ νμμ μΈμ μ§λ§ μ¬κΈ°μ λ¬Έμ κ° μλ€.
λ§μ§λ§ N-1λ²μ§Έ μ§(첫 μ§μ 0λ²μ§Έ μ§μ΄λΌ μκ°)μ λ°©λ¬Ένλ € ν λ, μ νμμ μν΄μ
DP[ 1 ][ N - 1 ] = DP[ 0 ][ N - 1 ] + money[ N - 1 ] μΈλ° μ¬κΈ°μ DP[ 0 ][ N - 1 ] μ μ μ₯λμ΄ μλ κ°μ΄ 0λ²μ§Έ μ§μ λ°©λ¬Έν΄μ λ§λ€μ΄ μ§ κ°μΈμ§ μλμ§ μ μκ° μλ€.
0λ²μ§Έ μ§μ λ°©λ¬Ένμ κ²½μ°λ λ§μ§λ§ N-1λ²μ§Έ μ§μ λ°©λ¬Ένμ§ λͺ»νλλ° μ΄κ²μ 체ν¬ν λ°©λ²μ΄ μλ€.
κ·Έλμ λ΄κ° μκ°ν λ°©λ²μ 첫λ²μ§Έ μ§μ λ°©λ¬Ένλ€κ³ μκ°νκ³ N-2λ²μ§Έ μ§κΉμ§ λλ¬νμ λ νμΉ μ μλ μ΅λ κΈμ‘κ³Ό
첫λ²μ§Έ μ§μ λ°©λ¬Ένμ§ μμλ€κ³ μκ°νκ³ N-1λ²μ§Έ μ§κΉμ§ λλ¬νμ λ νμΉ μ μλ μ΅λ κΈμ‘ μ€ ν° κ°μ λ΅μΌλ‘ μκ°νκΈ°λ‘ νλ€.
첫λ²μ§Έ μ§μ λ°©λ¬Ένλ€κ³ μκ°νμ λλ μ N-1λ²μ§Έκ° μλ N-2λ²μ§ΈκΉμ§ λλ¬νμ λ μ΅λκ°μ 체ν¬νλλ
μ΄μ§νΌ 첫λ²μ§Έ μ§μ λ°©λ¬Ένλ€λ©΄ λ§μ§λ§ μ§μ λ°©λ¬Ένμ§ λͺ»νκΈ°λλ¬Έμ λ§μ§λ§ μ§μ μλ―Έκ° μλ€.
μ½λ μμ±
|
#include <string>
#include <vector>
#include <string.h>
using namespace std;
const int MAX_N = 1000000 + 5;
int DP[2][MAX_N];
int solution(vector<int> money) {
int answer = 0;
int N = money.size(); //μ§μ κ°μ
DP[0][0] = 0;
DP[1][0] = 0;
for(int i = 1; i<N; i++){
DP[0][i] = max(DP[1][i-1], DP[0][i-1]);
DP[1][i] = DP[0][i-1] + money[i];
}
answer = max(DP[1][N-1], DP[0][N-1]);
memset(DP,0,sizeof(DP));
DP[1][0] = money[0];
for(int i = 1; i<N-1; i++){
DP[0][i] = max(DP[1][i-1], DP[0][i-1]);
DP[1][i] = DP[0][i-1] + money[i];
}
answer = max(answer, max(DP[0][N-2], DP[1][N-2]));
return answer;
}
|
cs |
'νλ‘κ·Έλλ¨Έμ€ > 4λ¨κ³' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€ Lv4] : 무μ§μ λ¨Ήλ°© λΌμ΄λΈ (0) | 2022.07.13 |
---|---|
[νλ‘κ·Έλλ¨Έμ€ Lv4] : κ°μ¬ κ²μ (0) | 2022.07.12 |
[νλ‘κ·Έλλ¨Έμ€ Lv4] : λ¨μ΄ νΌμ¦ (0) | 2022.07.11 |
[νλ‘κ·Έλλ¨Έμ€ Lv4] : μ§ν μ΄λ (0) | 2022.07.11 |
[νλ‘κ·Έλλ¨Έμ€ Lv4] : μ§κ²λ€λ¦¬ (0) | 2022.06.21 |