λ§ν¬
https://www.acmicpc.net/problem/2579
λ¬Έμ μμ½
κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§ λ μ΄ κ²μμμ μ»μ μ μλ μ΄μ μμ μ΅λκ° κ΅¬νκΈ°
- κ³λ¨μ ν λ²μ ν κ³λ¨μ© λλ λ κ³λ¨μ© μ€λ₯Ό μ μλ€.
- μ°μλ μΈ κ°μ κ³λ¨μ λͺ¨λ λ°μμλ μ λλ€. λ¨, μμμ μ κ³λ¨μ ν¬ν¨λμ§ μλλ€.
- λ§μ§λ§ λμ°© κ³λ¨μ λ°λμ λ°μμΌ νλ€.
μ ν
- 첫째 μ€μ κ³λ¨μ κ°μ μ£Όμ΄μ§λ€.
- 300 μ΄νμ μμ°μ
- λμ§Έ μ€λΆν° ν μ€μ νλμ© μ μΌ μλμ λμΈ κ³λ¨λΆν° μμλλ‘ κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§λ€.
- κ³λ¨μ μ°μ¬ μλ μ μλ 10,000 μ΄νμ μμ°μ
νμ΄
μ£Όμ΄μ§ μμ μ λν΄ μ΅λ μ μλ‘ κ° κ³λ¨μ λμ°©νλ λ°©μμ μλμ κ°μ΅λλ€.
| λμ°© κ³λ¨ | 1λ² | 2λ² | 3λ² | 4λ² | 5λ² | 6λ² |
| κ²½λ‘ | 1 | 1-2 | 2-3 | 1-2-4 | 1-2-4-5 | 1-2-4-6 |
| μ μ | 10 | 10+20 | 20+15 | 10+20+25 | 10+20+25+10 | 10+20+25+20 |
μ²μ λ΄€μ λ κ°λ₯ν κ²½λ‘λ₯Ό λ€μκ³Ό κ°μ΄ μ λ¦¬ν΄ λ΄€μ΅λλ€.
- 1λ²: νμ 1
- 2λ²: νμ 1-2
- 3λ²: 1-2-3(2λ² μ μ>1λ² μ μμΌ λ) / 1-3(1λ² μ μ>2λ² μ μμΌ λ)
- ⇒ (1,2λ² μ€ μ μκ° ν° μͺ½) + 3λ² μ μ
- 4λ²: 1-2-4(2λ² μ μ>3λ² μ μμΌ λ) / 1-3-4(3λ² μ μ>2λ² μ μμΌ λ)
- ⇒ (2,3λ² μ€ μ μκ° ν° λ£¨νΈ) + 4λ² μ μ
- ...
1λ²κ³Ό 2λ²μ νμ κ²½λ‘κ° κ°μΌλ―λ‘ μ΄κΈ°κ°μ μ§μ ν μ μμ΅λλ€.
κ·Έ μ΄μΈμ μ«μ NκΉμ§μ κ²½λ‘λ (N-1, N-2λ² μ€ μ μκ° ν° μͺ½ 루νΈ) + Nλ² μ μλΌκ³ μ 리νμ΅λλ€.
νμ§λ§ μ΄λ μλͺ»λ μ 리μ λλ€!!
3λ²κΉμ§μ 루νΈλ₯Ό λ΄ μλ€.
1λ²κ³Ό 2λ² μ€ 2λ²μ μ μκ° λ ν¬λ―λ‘ 2λ²κΉμ§μ λ£¨νΈ + 3λ²μ μ ννκ² λ©λλ€.
κ·Όλ°, μ΄λ κ² λλ©΄ 루νΈκ° 1-2-3μ΄λ―λ‘ μ°μλ μΈ κ°μ κ³λ¨μ λ°μΌλ©΄ μ λλ€λ κ·μΉμ μ΄κΈ°κ² λ©λλ€.
⇒ Nλ²κΉμ§μ 루νΈλ₯Ό μ ν λ N-1λ² λ£¨νΈλ₯Ό κ°μ Έλ€ μ°λ©΄, μ°μλ μΈ κ°μ κ³λ¨μ λ°μλμ§ κ³ λ €ν μ μμ΅λλ€.
Nλ²μ§Έ κ³λ¨μ μ€κΈ° μ§μ μ μκ°ν΄ λ΄ μλ€. μ΄ λ κ°μ§ κ²½μ°κ° λ°μν μ μμ΅λλ€.
- `N-2`λ²μ§Έ κ³λ¨ λμ°©νκ³ , Nλ²μ§Έ κ³λ¨ λ°κΈ°(λ κ³λ¨ μ€λ¦)
- N-3λ²μ§Έ κ³λ¨ λμ°©νκ³ , N-1λ²μ§Έ κ³λ¨μ λ°κ³ , Nλ²μ§Έ κ³λ¨ λ°κΈ°(ν κ³λ¨ μ€λ¦)
2λ²μ§Έ κ²½μ°λ 3 κ³λ¨μ μ°μμΌλ‘ λ°μ§ μκΈ° μν΄ N-3λ²μ§ΈκΉμ§ κ³ λ €ν΄μΌ ν©λλ€.
κ²°λ‘ μ μΌλ‘, μ λ κ²½μ° μ€ μ μ ν©μ΄ ν° λ£¨νΈλ₯Ό μ ννλ©΄ λ©λλ€!
λ κ²½μ°λ‘ λλ κ²½λ‘λ₯Ό λ€μ μ 리νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- 1λ²: νμ 1
- 2λ²: νμ 1-2
- 3λ²: 2-3(1λ² λ£¨νΈ+3λ²) / 1-3(μμμ +1λ²+3λ²)
- 4λ²: 1-2-4(2λ² λ£¨νΈ+4λ²) / 1-3-4(1λ² λ£¨νΈ+3λ²+4λ²)
- 5λ²: 1-2-4-5(4λ² λ£¨νΈ+5λ²) / (3λ² λ£¨νΈ+4λ²+5λ²)
- ...
μ½λ
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] dp;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
dp = new int[N + 1];
arr = new int[N + 1];
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
dp[1] = arr[1];
System.out.print(sol(N));
}
// Nλ² κ³λ¨ λμ°© = ((N-2λ² κ³λ¨ λ°κΈ°) or (N-3λ²κ³Ό N-1λ² κ³λ¨ λ°κΈ°)) + Nλ² κ³λ¨ λ°κΈ°
static int sol(int num) {
if(dp[num] > 0){ // μ΄λ―Έ κ³μ°λ κ²½μ°
return dp[num];
}
if(num <= 1){
return dp[num];
}
if (num == 2) { // 2λ² κ³λ¨μ νμ 1λ² κ³λ¨ + 2λ² κ³λ¨
return dp[2] = arr[1] + arr[2];
}
return dp[num] = Math.max(sol(num - 2), sol(num - 3) + arr[num - 1]) + arr[num];
}
}
π· μκ° λ³΅μ‘λ
- κ° Nκ°μ κ³λ¨μ λν΄ μ΅λ μ μλ₯Ό ν λ²μ©λ§ κ³μ°νλ―λ‘ μκ° λ³΅μ‘λλ O(N)
π· μ€ν μλ
Time: 100 ms, Memory: 14224 KB
'πͺ Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [BOJ/λ°±μ€] 1010 λ€λ¦¬ λκΈ° (JAVA) (1) | 2025.02.13 |
|---|---|
| [BOJ/λ°±μ€] 13023 ABCDE(JAVA) (1) | 2025.02.12 |
| [BOJ/λ°±μ€] 2178 λ―Έλ‘ νμ(JAVA) (1) | 2025.02.11 |
| [BOJ/λ°±μ€] 1931 νμμ€ λ°°μ (JAVA) (1) | 2025.02.10 |