characterFrequency (javascript)

JellyChoco·2020년 6월 26일
0
post-thumbnail

문제

Write a function that takes as its input a string and returns an array of
   arrays as shown below sorted in descending order by frequency and then by
   ascending order by character.
 
        :: Example ::
 
   characterFrequency('mississippi') ===
   [
     ['i', 4],
     ['s', 4],
     ['p', 2],
     ['m', 1]
   ]
 
        :: Example2 ::
 
   characterFrequency('miaaiaaippi') ===
   [
     ['a', 4],
     ['i', 4],
     ['p', 2],
     ['m', 1]
   ]
 
        :: Example3 ::
 
   characterFrequency('mmmaaaiiibbb') ===
   [
     ['a', 3],
     ['b', 3],
     ['i', 3],
     ['m', 3]
   ]
 
 var characterFrequency = function (string) {
    
};

해석

문자열이 인풋으로 주어지면 중복되는 문자열의 개수를 나타내는 숫자를
문자와 함께 배열에 담아서 정렬한 다음 2차원 배열로 반환하라는 문제

풀이

var characterFrequency = function (string) {
 
  let convertToObj = string
    .split("")
    .sort()
    .reduce((all, one) => {
      if (one in all) {
        all[one]++;
      } else {
        all[one] = 1;
      }
      return all;
    }, {});

  let converToArray = [];

  for (let key in convertToObj) {
    converToArray.push([key, convertToObj[key]]);
  }

  converToArray.sort((a, b) => {
    return b[1] - a[1];
  });
  console.log(converToArray);
  return converToArray;

  
};

후기

한번에 배열에 담는 방법도 있겠지만 객체로 한번 전환했다 한 이유는
MDN에도 나와있는 reduce()의 활용법 중 배열의 value들을 카운트해주는
사용법이 있기에 한번 전환해놓고 생각하면 쉬워서
항상 이런 문제를 마주하게 되면 일단 객체형태로 카운트 해놓고 보는 스타일이다.

profile
코린이? 개린이!

0개의 댓글