[Baekjoon] 1965_μμλ£κΈ°
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/1965)
< μμλ£κΈ° >
λ¬Έμ νμ΄
μμ μλ μμμ ν¬κΈ°κ° λ€μ μλ μμμ ν¬κΈ°λ³΄λ€ μμ κ²½μ° λ£μ μ μλ€λ©΄, μ€μ²© λ°λ³΅λ¬Έμ μ¬μ©νμ¬ νμ¬ μμΉλ³΄λ€ μμ μλ μμμ ν¬κΈ°κ° μμΌλ©΄ νμ¬ μμΉ κ°κ³Ό, μμ μμ μμΉμ κ° +1μ λΉκ΅νμ¬ μ΅λκ°μΌλ‘ μ λ°μ΄νΈνλ€.
λ§μ½, μμ κ° μλμ κ°λ€λ©΄
8
1 6 2 5 7 3 5 6
λ€μκ³Ό κ°μ΄ νκ° μ±μμ§λ€.
| box | 1 | 6 | 2 | 5 | 7 | 3 | 5 | 6 |
| 1 | 2 | 2 | 3 | 4 | 3 | 4 | 5 |
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _1965_ { // μμλ£κΈ°
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
int box[] = new int[n];
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < n; i++) {
box[i] = Integer.parseInt(st.nextToken());
}
int dp[] = new int[n];
for (int i = 0; i < n; i++) {
dp[i] = 1;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (box[j] < box[i]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int result = 1;
for (int i = 0; i < n; i++) {
result = Math.max(result, dp[i]);
}
System.out.println(result);
}
λ³μ)
n : μμμ κ°μ
box : μμμ ν¬κΈ°
dp : κ° μμΉμμ λ£μ μ μλ μ΅λμ μμ κ°μ
result : λ£μ μ μλ μ΅λμ μμ κ°μ
μμμ κ°μλ₯Ό μ λ ₯λ°λλ€. μμμ κ°μλ§νΌ μμμ ν¬κΈ°λ₯Ό μ λ ₯λ°μ box λ°°μ΄μ μ μ₯νλ€. κ° μμΉμμ λ£μ μ μλ μ΅λμ μμ κ°μλ₯Ό ꡬνκΈ° μν΄ λ°°μ΄μ 1λ‘ μ΄κΈ°ννλ€. forλ¬Έμ νμ©νμ¬ νμ¬ μμΉμμ μμ μμλ₯Ό νμνλ©° νμ¬ μμλ³΄λ€ μλ€λ©΄ μ΅λκ°μΌλ‘ μ λ°μ΄νΈνλ€.
μ΅μ’ dp λ°°μ΄μ νμνλ©° μ΅λκ°μ μΆλ ₯νλ€.
