인자: str
ㆍstring 타입의 공백이 있는 문장
ㆍ띄어쓰기는 제외
ㆍ가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야 한다.
ㆍ빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 한다.
입출력 예시
let output = mostFrequentCharacter('apples not oranges'); console.log(output); // --> 'p' <br> output = mostFrequentCharacter('hello world'); console.log(output); // --> 'l'
해결한 답
function mostFrequentCharacter(str) { let obj = { mostCount: 0, mostFrequent: '' }; // 횟수를 비교하고 재할당 할 수 있는 변수를 키와 값으로 넣어줌 for (let i = 0; i < str.length; i++) { if (str[i] === ' ') { continue; // 사이클을 도는 도중 띄어쓰기는 제외 } <br> if (!(str[i] in obj)) { // obj 객체 안에 전달인자의 스펠링이 없는 경우 obj[str[i]] = 0; // 해당 문자를 키로 넣어주고 0을 값으로 할당 } obj[str[i]] += 1; // 해당 문자의 카운트를 1씩 추가 <br> if (obj[str[i]] > obj['mostCount']) { // 기존 mostCount 횟수와 비교 obj['mostCount'] = obj[str[i]]; // mostCount 보다 크면 해당 횟수 재할당 obj['mostFrequent'] = str[i]; // mostFrequent에 해당 문자 재할당 } } return obj['mostFrequent']; // 해당 문자의 해당 카운트 리턴 }
위의 문제를 해결할 때
빈 객체에 해당 문자를 키와 값(count 1씩 추가)를 넣어주는 것까지는 생각했지만,
문자열(str)을 순환하면서 가장 많이 반복되는 문자가 다수일 경우,
가장 먼저 해당 횟수에 도달한 문자를 리턴해야 한다는 문제에 부딪쳤다.
부딪친 문제의 핵심은 반복문 사이클을 돌면서 "비교"를 통해 "가장 먼저 도달"하는 문자를
알아야 한다는 것이다.
그렇기에 한 번 돌때마다 가장 중복되는 횟수가 많은 문자가 기준이 되어야 하기 때문에
obj 객체에 횟수를 비교하고 해당 문자를 계속 재할당 할 수 있는
"mostCount"와 "mostFrequent"를 넣어준 것이다.