Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열 요소의 빈도 분포 계산하기

이번 글에서는 문자열을 입력받아 각 문자(요소)가 몇 번 등장했는지를 나타내는 빈도 분포(frequency distribution) 객체를 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.

문제 정의

다음과 같은 문자열이 있다고 가정해 보겠습니다.

const str = 'This string will be used to calculate frequency distribution';

우리가 만들어야 할 함수는 이 문자열을 분석하여, 각 문자가 키(key)가 되고 해당 문자의 등장 횟수가 값(value)이 되는 객체를 반환해야 합니다. 공백 역시 하나의 요소로 계산된다는 점에 유의하세요.

구현 코드

핵심 아이디어는 간단합니다. 문자열을 한 글자씩 순회하면서 각 문자의 등장 횟수를 객체에 누적하는 것입니다. 이때 논리 연산자 ||(OR)를 활용하면 코드를 깔끔하게 작성할 수 있습니다.

  • 문자가 이미 객체에 존재하면 → 기존 값에 1을 더함
  • 문자가 처음 등장했다면 → undefined || 0이 되어 0 + 1 = 1로 초기화됨
const str = 'This string will be used to calculate frequency
distribution';

const frequencyDistribution = str => {
    const map = {};
    for(let i = 0; i < str.length; i++){
        map[str[i]] = (map[str[i]] || 0) + 1;
    };
    return map;
};

console.log(frequencyDistribution(str));

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 빈도 분포 객체가 출력됩니다.

{
    T: 1,
    h: 1,
    i: 6,
    s: 4,
    ' ': 8,
    t: 5,
    r: 3,
    n: 3,
    g: 1,
    w: 1,
    l: 4,
    b: 2,
    e: 5,
    u: 4,
    d: 2,
    o: 2,
    c: 3,
    a: 2,
    f: 1,
    q: 1,
    y: 1
}

결과 해석

출력 결과를 보면 공백(' ')이 8번으로 가장 많이 등장했으며, 그다음으로는 i(6회), te(각 5회) 순으로 자주 사용된 것을 확인할 수 있습니다. 대소문자는 서로 다른 키로 구분되므로, 대문자 T와 소문자 t는 별개로 집계됩니다.

만약 대소문자를 구분하지 않고 싶다면 str.toLowerCase()를 적용한 뒤 함수에 전달하면 됩니다. 이처럼 단순한 반복문 하나로 문자열 내 모든 요소의 빈도 분포를 손쉽게 계산할 수 있습니다.