Leetcode Java Maximum Manhattan Distance After K Changes
업데이트:
문제
코드
class Solution {
public int minimumDeletions(String word, int k) {
int result = 100000;
int[] counts = new int[26];
for (char c : word.toCharArray()) {
counts[c - 'a']++;
}
for (int i = 0; i < 26; i++) {
if (counts[i] == 0) {
continue;
}
int count = 0;
for (int j = 0; j < 26; j++) {
if (i == j || counts[j] == 0) {
continue;
}
count += counts[j] < counts[i] ? counts[j] : Math.max(0, counts[j] - (counts[i] + k));
}
result = Math.min(result, count);
}
return result;
}
}
결과
설명
-
word 내 문자의 각 갯수가 모두 k개 이내의 차이가 되도록 하기 위해 삭제해야 할 문자의 최소 갯수를 게산하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 삭제할 문자의 갯수르 계산하기위한 변수로, 문자열의 최대 길이인 $10^5$로 초기화한다.
- counts는 word의 각 문자 갯수를 계산하여 저장할 변수로, word의 각 문자 별 위치에 해당 갯수를 넣어준다.
- 0부터 26 미만까지 i를 증가시키며 아래를 반복한다.
- counts[i]의 값이 0인 존재하지 않는 경우는 무시한다.
- count는 현재 삭제할 문자의 갯수를 저장할 변수로, 0으로 초기화한다.
- 0부터 26 미만까지 j를 증가시키며 아래를 반복한다.
- i와 j가 동일한 검증이 필요 없거나, counts[j]의 값이 0인 존재하지 않는 문자의 경우는 무시한다.
- count에 counts[j]의 값이 counts[i]의 값보다 작으면 j번째 문자를 삭제하는 경우인 counts[j]를 넣고, 아니면 0과 k개 이내의 차이가 되기 위한 $counts[j] - (counts[i] + k)$의 값 중 큰 값을 넣어준다.
- 위 반복이 완료되면 result에 아래 두 경우 중 가장 작은 값을 넣어준다.
- 이전까지 삭제해야할 최소 갯수가 저장된 result의 값.
- j번째 문자 기준으로 각 문자가 k개 이내의 차이가 되도록 하기 위한 최소 갯수가 저장된 count의 값.
- 반복이 완료되면 조건을 맍족한 최소 갯수가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기