πAlgorithm/π₯Baekjoon
[Baekjoon] 19622_νμμ€ λ°°μ 3
λΏμΌ._.
2026. 2. 12. 17:13
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/19622)
< νμμ€ λ°°μ 3 >
λ¬Έμ νμ΄
μμμ νμ kλ k-1κ³Ό k+1 νμμ μκ°μ΄ κ²ΉμΉκ³ λ€λ₯Έ νμλ€μ κ²ΉμΉμ§ μμΌλ―λ‘(k-2 νμ + k νμ, k-1 νμ) μ€μ μ΅λκ°μ μ ννλ€.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _19622_ { // νμμ€ λ°°μ 3
static class Info {
int start;
int end;
int num;
public Info(int start, int end, int num) {
this.start = start;
this.end = end;
this.num = num;
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
Info arr[] = new Info[n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
arr[i] = new Info(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken()));
}
int dp[] = new int[n];
dp[0] = arr[0].num;
if (n > 1) {
dp[1] = Math.max(dp[0], arr[1].num);
}
for (int i = 2; i < n; i++) {
dp[i] = Math.max(dp[i - 2] + arr[i].num, dp[i - 1]);
}
int result = 0;
for (int i = 0; i < n; i++) {
result = Math.max(result, dp[i]);
}
System.out.println(result);
}
}
λ³μ)
n : νμμ μ
arr : νμ μ 보λ₯Ό μ μ₯νλ λ°°μ΄
dp : νμλ₯Ό μ§νν μ μλ μ΅λ μΈμμ ꡬνλ λ°°μ΄
result : νμλ₯Ό μ§νν μ μλ μ΅λ μΈμ
νμμ μλ₯Ό μ λ ₯λ°λλ€. νμμ μλ§νΌ νμ μ 보λ₯Ό μ λ ₯λ°μ λ°°μ΄μ μ μ₯νλ€. dpμ 0λ²μ§Έλ₯Ό 0λ²μ§Έ νμμ μ°Έμνλ μΈμμΌλ‘, 1λ²μ§Έλ₯Ό 0λ²μ§Έμ 1λ²μ§Έ νμμ μ°Έμνλ μΈμ μ€ μ΅λκ°μΌλ‘ μ΄κΈ°ννλ€. λλ¨Έμ§λ₯Ό νμνλ©° νμ¬ νμλ₯Ό μ ννλ€λ©΄ dp[i-2]+νμ¬ νμ μ°Έμ μΈμ, νμ¬ νμλ₯Ό μ ννμ§ μλλ€λ©΄ dp[i-1] μ΄λ―λ‘ λ μ€μ μ΅λκ°μΌλ‘ μ μ₯νλ€.
μ΅μ’ dpλ₯Ό νμνλ©° μ΅λκ°μ μΆλ ₯νλ€.
