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

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

문자열을 입력받아 해당 문자열에서 두 번째로 많이 등장하는 문자를 반환하는 JavaScript 함수를 작성해야 합니다.

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

const str = 'Hello world, I have never seen such a beautiful weather in the world';

이 문자열에서 가장 많이 등장하는 문자는 공백(' ')이고, 그다음으로 많이 등장하는 문자는 'e'입니다. 따라서 함수의 결과값은 'e'가 되어야 합니다.

구현 방법

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

  1. 객체(맵)를 사용하여 각 문자의 등장 횟수를 계산합니다.
  2. 등장 횟수 데이터를 배열 형태로 변환합니다.
  3. 등장 횟수를 기준으로 내림차순 정렬합니다.
  4. 정렬된 배열에서 두 번째 요소의 문자를 반환합니다.

코드 예제

const str = 'Hello world, I have never seen such a beautiful weather in the world';

const secondFrequent = str => {
   const map = {};
   // 각 문자의 등장 횟수 계산
   for(let i = 0; i < str.length; i++){
      map[str[i]] = (map[str[i]] || 0) + 1;
   };
   // {문자: 횟수} 형태를 [문자, 횟수] 배열로 변환
   const freqArr = Object.keys(map).map(el => [el, map[el]]);
   // 등장 횟수 기준 내림차순 정렬
   freqArr.sort((a, b) => b[1] - a[1]);
   // 두 번째로 빈도가 높은 문자 반환
   return freqArr[1][0];
};
console.log(secondFrequent(str));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

e

코드 설명

핵심 로직을 살펴보면 다음과 같습니다.

  • 빈도 계산: (map[str[i]] || 0) + 1 패턴을 사용해 이미 존재하는 문자는 횟수를 1 증가시키고, 처음 등장한 문자는 1로 초기화합니다.
  • 정렬: sort((a, b) => b[1] - a[1])를 통해 등장 횟수가 높은 순서대로 정렬합니다.
  • 결과 추출: 정렬 후 인덱스 1(두 번째 위치)에 있는 문자를 반환합니다.

참고로 이 구현은 대소문자와 공백을 모두 별개의 문자로 취급합니다. 만약 대소문자를 구분하지 않으려면 str.toLowerCase()를 먼저 적용하면 됩니다.