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

JavaScript로 문장에서 가장 자주 등장하는 n개의 단어 찾기


이 문제에서 문장(sentence)은 영어 알파벳과 문장 부호를 포함하는 문자열로 정의하며, 단어(word)는 그 문장 안에서 공백으로 구분되는 부분 문자열을 의미합니다.

우리가 작성해야 할 JavaScript 함수는 다음과 같이 동작해야 합니다.

  • 첫 번째 인자로 문장 문자열 str을 받고, 두 번째 인자로 숫자 num을 받습니다.
  • 함수는 먼저 문장 내 각 단어의 출현 빈도를 계산합니다.
  • 그다음, 빈도가 높은 순서(내림차순)대로 정렬하여 가장 빈번한 num개의 단어를 배열로 반환합니다.

예시

예를 들어, 입력 문장과 숫자가 다음과 같다고 해보겠습니다.

const str = 'i am a good coder and i know that i can solve a problem';
const num = 2;

이 경우 기대되는 출력 결과는 다음과 같습니다.

const output = ['i', 'a'];

'i'는 3번, 'a'는 2번 등장하기 때문에 이 두 단어가 해당 문자열에서 가장 많이 사용된 상위 2개의 단어이기 때문입니다.

구현 코드

위 요구 사항을 충족하는 코드는 다음과 같습니다.

const str = 'i am a good coder and i know that i can solve a problem';
const num = 2;
const findMostFrequent = (str = '', num = 1) => {
    const strArr = str.split(' ');
    const map = {};
    strArr.forEach(word => {
        if(map.hasOwnProperty(word)){
            map[word]++;
        }else{
            map[word] = 1;
        }
    });
    const frequencyArr = Object.keys(map).map(key => [key, map[key]]);
    frequencyArr.sort((a, b) => b[1] - a[1]);
    return frequencyArr.slice(0, num).map(el => el[0]);
};
console.log(findMostFrequent(str, num));

코드 설명

이 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

  • split(' ')을 사용해 문장을 공백 기준으로 나누어 단어 배열을 만듭니다.
  • 객체(map)를 이용해 각 단어의 출현 횟수를 카운트합니다.
  • Object.keys()로 단어와 빈도를 쌍으로 하는 배열을 생성한 뒤, 빈도를 기준으로 내림차순 정렬합니다.
  • 정렬된 배열에서 앞의 num개 요소만 잘라내어 단어 이름만 반환합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ 'i', 'a' ]