1. 접근법
다이나믹프로그래밍
2. 로직
이 문제는 LIS를 사전에 알아야 풀 수 있는 문제다.
LIS를 구현하는 법은 o(n^2) 부터 nlogn 까지 있다. 나같은 경우는 n^2으로 풀이를 했다.
1) 오른차순 정렬
2) 현재 인덱스 전까지 비교하며 메모리제이션 한다.
3. 코드
class Solution {
public int maxEnvelopes(int[][] envelopes) {
Arrays.sort(envelopes, new Comparator<int[]>(){
public int compare(int pair1[], int pair2[]){
if(pair1[0] == pair2[0]){
return pair1[1] - pair2[1];
}
return pair1[0] - pair2[0];
}
});
int dp[] = new int[envelopes.length];
int max=0;
for(int i=0; i<envelopes.length; i++){
dp[i] = 1;
for(int j=0; j<i; j++){
if(envelopes[i][0]>envelopes[j][0] && envelopes[i][1]>envelopes[j][1] && dp[i]==dp[j]){
dp[i]++;
}
}
max=Math.max(dp[i], max);
}
return max;
}
}
'알고리즘 > 리트코드' 카테고리의 다른 글
581. Shortest Unsorted Continuous Subarray (0) | 2021.04.10 |
---|---|
621. Task Scheduler (0) | 2021.04.10 |
리트코드 데일리과제(3/27) - palindromic-substrings (0) | 2021.03.27 |
리트코드 데일리과제(3/26) - 916. Word Subsets (0) | 2021.03.26 |
리트코드 데일리과제(3/25) - Pacific Atlantic Water Flow (0) | 2021.03.25 |