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

접근 방법

  1. 각 문자의 출현 빈도를 해시맵에 저장
  2. 홀수 빈도 중 최대값, 짝수 빈도 중 최소값을 구함
  3. 최종 결과는 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;
};

마무리

문제 조건을 잘 분석하고, 적절한 초기값 설정과 예외 상황에 대한 고려가 중요한 문제였습니다.