문제
https://www.acmicpc.net/problem/11053
풀이
package Koala_study.week_4;
import java.util.Scanner;
public class s_11053 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
int ans = 0;
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < i; j++) {
//다음항이 이전항 보다 클때
if (arr[i] > arr[j]) {
count = Math.max(count, dp[j]);
}
}
dp[i] = count + 1;
ans = Math.max(ans, dp[i]);
}
System.out.println(ans);
}
}
내가 생각한 알고리즘
일단은 N이 최대 1000이기때문에 그냥 DP로 풀어도 된다고 생각했다
count 변수를 만들어 다음항이 이전항보다 클때 count와 dp[i]를 업데이트를 해주어 ans을 구하였습니다.
'Koala - 10기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 17179 : 케이크 자르기 (0) | 2023.04.01 |
---|---|
[백준/C++] 2343 : 기타 레슨 (0) | 2023.03.30 |
[백준/python] 1912 연속합 (0) | 2023.03.29 |
[백준/Python] 2638번 치즈 (0) | 2023.03.27 |
[백준/Python] #1806 부분합 (0) | 2023.03.27 |