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

JavaScript로 문자열에서 두 번째로 많이 등장하는 문자 찾기

문제 개요

이번 글에서는 문자열을 인자로 받아, 해당 문자열에서 두 번째로 많이 등장하는 문자를 반환하는 JavaScript 함수를 작성해 보겠습니다.

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

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

위 문자열에서 가장 많이 등장하는 문자를 제외하고 두 번째로 자주 나타나는 문자는 'e'입니다.

해결 접근 방식

이 문제는 다음 세 단계로 해결할 수 있습니다.

1. 문자열을 한 글자씩 분리합니다.
2. Map 객체를 활용해 각 문자의 등장 횟수를 집계합니다.
3. 빈도순으로 내림차순 정렬한 뒤, 두 번째 요소의 문자를 반환합니다.

전체 코드 예제

이제 완성된 코드를 살펴보겠습니다.

const str = 'This string will be used to calculate frequency';
const secondMostFrequent = str => {
    const strArr = str.split('');
    const map = strArr.reduce((acc, val) => {
        if(acc.has(val)){
            acc.set(val, acc.get(val) + 1);
        }else{
            acc.set(val, 1);
        };
        return acc;
    }, new Map);
    const frequencyArray = Array.from(map);
    return frequencyArray.sort((a, b) => {
        return b[1] - a[1];
    })[1][0];
};
console.log(secondMostFrequent(str));

코드 설명

split('') 메서드는 문자열을 개별 문자로 이루어진 배열로 변환합니다. 이후 reduce()Map 객체를 조합하여 각 문자가 몇 번 등장했는지 빈도를 누적 집계합니다. 이미 존재하는 문자라면 기존 값에 1을 더하고, 처음 등장한 문자라면 1로 설정합니다.

집계가 끝난 Map은 Array.from()을 통해 [문자, 빈도] 형태의 배열로 변환되며, sort()로 빈도를 기준으로 내림차순 정렬합니다. 정렬된 배열의 인덱스 1(두 번째 위치)에 있는 문자를 반환하면 원하는 결과를 얻을 수 있습니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.

e

이처럼 Map과 배열 메서드를 활용하면 복잡한 반복문 없이도 간결하게 문자 빈도 분석 문제를 해결할 수 있습니다.