Leetcode Java Delete Columns to Make Sorted III
업데이트:
문제
코드
class Solution {
public int minDeletionSize(String[] strs) {
int max = 1;
int length = strs[0].length();
int[] dp = new int[length];
for (int i = 0; i < length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (this.isLexicographicOrder(strs, i, j)) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
max = Math.max(max, dp[i]);
}
return length - max;
}
private boolean isLexicographicOrder(String[] strs, int i, int j) {
for (String str : strs) {
if (str.charAt(i) < str.charAt(j)) {
return false;
}
}
return true;
}
}
결과
설명
-
동일한 길이의 문자열이 들어있는 strs의 문자열들이 사전적 순서로 정렬된 최대 길이의 문자열이 되기 위해서 동일한 위치의 문자를 삭제할 때, 최소 삭제 횟수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- max는 문자열의 최대 길이를 저장할 변수로, 1로 초기화한다.
- length는 문자열의 길이를 저장할 변수로, strs의 첫 문자열의 길이를 넣어준다.
- dp는 문자열 최대 길이를 저장하기 위한 변수로, length 길이의 정수 배열로 초기화한다.
- 0부터 length 미만까지 i를 증가시키며 아래를 수행한다.
- dp의 i번째 위치에 1을 넣어준다.
- 0부터 i미만까지 j를 증가시키며 아래를 수행한다.
- 4번에서 정의한 isLexicographicOrder(String[] strs, int i, int j) 메서드를 수행하여 사전적 순서가 되는 경우, dp의 i번째 위치에 dp[i]와 $dp[j] + 1$ 중 큰 값을 넣어준다.
- max에 max와 dp[i]의 값 중 큰 값을 넣어 저장한다.
- sts의 모든 문자열들의 i번째 문자와 j번째 문자가 사전적 순서인지 검증하기 위한 isLexicographicOrder(String[] strs, int i, int j) 메서드를 정의한다.
- sts의 모든 문자열의 i번째 문자가 j번째 문자보다 작은 경우, false를 모두 수행되는 경우 true를 반환한다.
- 반복이 완료되면 length에서 문자열의 최대 길이인 max를 뺀 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기