- 생각
일전에 이런 문제를 많이 풀었는데, 푸는 방법은 다양하게있다.
1. LIS 알고리즘(dp보다 빠름) - 가장 긴 증가하는 부분 수열 2 (비슷한 문제를 LIS 알고리즘으로 푼 코드이다.)
2. DP - 가장 긴 증가하는 부분 수열 이전에 비슷한 문제를 DP 알고리즘으로 푼 코드이다.
3. 완전탐색 - 너무 오래걸린다. 시간초과 뜰 확률이 높음.
- 코드
정답 코드 : DP로 구현한 코드이다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] array, dp;
public static void main(String[] args) throws Exception {
SetData();
System.out.println(DP());
}
private static void SetData() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
dp = new int[N];
array = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
array[i] = Integer.parseInt(st.nextToken());
}
}
private static int DP() {
int max = 1;
for (int i = 0; i < N; i++) {
if (dp[i] == 0)
dp[i] = array[i];
for (int j = 0; j < i; j++) {
if (array[i] > array[j])
dp[i] = Math.max(dp[i], dp[j]+array[i]);
}
if(max<dp[i])
max=dp[i];
}
return max;
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 14651번 : 걷다보니 신천역 삼 (Large) (0) | 2020.12.11 |
---|---|
[JAVA] 백준 3187번 : 양치기 꿍 (0) | 2020.12.11 |
[JAVA] 백준 18429번 : 근손실 (0) | 2020.12.10 |
[JAVA] 백준 20004번 : 베스킨라빈스 31 (0) | 2020.12.07 |
[JAVA] 백준 14241번 : 슬라임 합치기 (0) | 2020.12.07 |