Web Development/algorithm
[Algorithm][LeetCode 3442][Easy] Maximum Difference Between Even and Odd Frequency I
devflate
2025. 6. 10. 10:11
문자열에서 홀수/짝수 빈도 차이 최대값 구하기 - JavaScript
이번 글에서는 문자열 내 각 문자의 빈도를 분석하여, 홀수 빈도를 가진 문자와 짝수 빈도를 가진 문자 사이의 빈도 차이 중 가장 큰 값을 구하는 문제를 다룹니다.
문제 설명
주어진 문자열 s에서 다음 조건을 만족하는 차이 diff = a1 - a2
의 최대값을 구합니다.
- a1: 홀수 빈도를 가진 문자
- a2: 짝수 빈도를 가진 문자
제약 조건:
- 3 ≤ s.length ≤ 100
- s는 소문자 알파벳으로만 구성
- 홀수 및 짝수 빈도를 갖는 문자가 각각 최소 1개 이상 존재함
예시
// 예시 1
입력: s = "aaaaabbc"
'a' → 5 (홀수), 'b' → 2 (짝수)
결과: 5 - 2 = 3
// 예시 2
입력: s = "abcabcab"
'a' → 3 (홀수), 'c' → 2 (짝수)
결과: 3 - 2 = 1
접근 방법
- 각 문자의 출현 빈도를 해시맵에 저장
- 홀수 빈도 중 최대값, 짝수 빈도 중 최소값을 구함
- 최종 결과는 maxOdd - minEven
주의할 점
초기값으로 maxOdd = -Infinity
, minEven = Infinity
를 사용하는 이유는 문제 조건상 홀수/짝수 빈도를 가진 문자가 각각 최소 1개 이상 존재하기 때문입니다. 조건이 없었다면 예외 처리가 필요했을 것입니다.
JavaScript 코드
/**
* @param {string} s
* @return {number}
*/
var maxDifference = function(s) {
const map = {};
let maxOdd = -Infinity;
let minEven = Infinity;
for (let str of s) {
map[str] = (map[str] || 0) + 1;
}
Object.keys(map).forEach((key) => {
const freq = map[key];
if (freq % 2 === 0) {
minEven = Math.min(minEven, freq);
} else {
maxOdd = Math.max(maxOdd, freq);
}
});
return maxOdd - minEven;
};
마무리
문제 조건을 잘 분석하고, 적절한 초기값 설정과 예외 상황에 대한 고려가 중요한 문제였습니다.