문자열 내 최빈값 구하기(MaxChars)

강명모(codingBear)·2022년 2월 21일
0

algorithm_JavaScript

목록 보기
8/36
post-thumbnail

References

아래 링크의 강의 중 Section 6. MaxChars의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy


Solution 1. my solution

function maxChar(str) {
  const splited = str.split("");
  let cnt = "";
  const cntArr = [];
  
  for (let i = 0; i < splited.length; ++i) {
    cnt = splited.filter((el) => splited[i] === el).length;
    cntArr.push(cnt);
  }
 
  const maxCnt = [...cntArr].sort()[cntArr.length - 1];
  const maxCntIdx = cntArr.findIndex((el) => {
    return el === maxCnt;
  });
  
  return splited[maxCntIdx];
}
console.log(maxChar("abcccccccd"));
  1. 문자열 strsplit으로 나누어 배열 만들기.
  2. 배열 내 문자 등장횟수 셀 변수 cnt 선언.
  3. 각 문자 등장횟수 담을 빈 배열 cntArr 선언.
  4. for문통해 str를 탐색하면서 filter()method로 등장횟수 세어 cntArr에 push.
  5. sort()method를 통해 최대값 구하기.
  6. findIndex()method로 cntArr내 최초로 등장한 최빈값의 idx 구하기.
  7. splited 배열에서 cntArr 내 최빈값의 idx와 일치하는 값 반환.

filter()

filter()_MDN_Link

array.filter((element, index, array) => {});

Parameters

  • element: 현재 array 내 탐색 중인 값
  • index(Optional): 현재 array 내 탐색 중인 elementindex
  • array(Optional): filter()를 호출한 배열

Return value
조건과 일치하는 값을 배열에 담아 반환. 조건에 맞는 값이 없으면 빈 배열을 반환.


findIndex()

findIndex()_MDN_Link

array.findIndex((element, index, array) => {})

Parameters

  • element: 현재 array 내 탐색 중인 값
  • index(Optional): 현재 array 내 탐색 중인 elementindex
  • array(Optional): filter()를 호출한 배열

Return value
배열 내에서 주어진 조건을 충족한 첫 번째 값을 반환. 없으면 -1 반환.


Solution 2. with object

function maxChar(str) {
  const charMap = {};
  let max = 0;
  let maxChar = "";

  for (let char of str) {
    if (charMap[char]) {
      charMap[char]++;
    } else {
      charMap[char] = 1;
    }
    // charMap[char] = charMap[char] + 1 || 1; 위 if문 대신 쓸 수 있음.
  }

  for (let char in charMap) {
    if (charMap[char] > max) {
      max = charMap[char];
      maxChar = char;
    }
  }
  return maxChar;
}
console.log(maxChar("abcccccccd"));
  1. 각 문자별 등장횟수를 담을 빈 객체 charMap 선언.
  2. for문 돌면서 최대값을 구할 때 쓰일 maxmaxChar 선언.
  3. for... of로 문자열 str 탐색하면서 charMap[char]가 이미 존재한다면 value1 증가, 처음 등장하는 문자라면 value1 설정.
  4. for... in으로 객체 charMap 탐색하면서 max보다 charMapvalue가 클 경우, maxcharMap[char](value)로 치환하고 maxCharchar(key)로 치환.
  5. 반복 작업이 끝나면 등장횟수가 가장 많은 문자 maxChar 반환.
profile
front-end 분야를 중점으로 공부 중!🐣

0개의 댓글