본문 바로가기

알고리즘

문자열을 입력받아 가장 많이 반복되는 문자(letter)를 반환

[주의사항]

1. 띄어쓰기는 제외합니다

2. 가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야 합니다(실시간 체크가 필요)]

3. 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다]

[해결방안] 객체의 key, value를 이용하여 key의 상태 값을 value에 저장해서 key의 상태변화를 실시간으로 체크할 수 있다. -> key는 각 문자, value는 각 문자의 반복횟수

function mostFrequentCharacter(str) {

 // TODO: 여기에 코드를 작성합니다.

 // 문자열 내 모든 공백 제거 , unmutable이기 때문에 결과값이 원본배열에 영향안줌

 str = str.replace(/ /g,'');

 if(str.length > 0) {

  

   // 최대 반복 문자

   let maxNumLetter = '';

   // 최대 반복 수

   let maxNum = 0;

   // 각 문자 반복횟수 저장 객체

   let tempObj = {};

 

   for(let i=0;i<str.length;i++) {

     // 객체를 이용하여 각 문자 : 문자 반복 횟수를 key-value형식으로 저장(해당 문자가 key로 저장여부 확인)

     // 해당 문자가 key값으로 저장된 경우 value값 1증가, 없는 경우 해당 문자를 key로 value = 1로 값 추가

     str[i] in tempObj ? tempObj[str[i]] = tempObj[str[i]] + 1 : tempObj[str[i]] = 1;

 

     // 객체를 반복수행하여 현재 존재하는 value를 비교하여 가장 큰수를 maxNum, 해당 key는 maxNumLetter로 저장

     // 각 문자열의 문자 반복횟수를 count할 때 마다 실시간으로 체크

     for(key in tempObj) {

       if(tempObj[key] > maxNum) {

         maxNum = tempObj[key];

         maxNumLetter = key;

       }

     }

 

   }

   return maxNumLetter;

 }

 else return '';

}