Code-kata 7일차

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

function moreThanHalfObject(nums) {
  const result = {};
  nums.forEach((x) => {
    if (result[x]) {
      result[x] = result[x] +1;
    }
    else {
      result[x] = 0 + 1;
    }
  })
  return result
}

function moreThanHalf(nums) {
  let obj = moreThanHalfObject(nums);
  let arr = Object.values(obj);
  let max = Math.max(...arr)
  return Number(getKeyByValue(obj, max));
}

어떻게 할지 고민하다가 객체를 만들기로 결심했다. 각 숫자를 key로 하고 그 개수를 value로 해서 풀어나가면 좋을 것 같다고 생각했다. 그리고 value들을 배열로 만들어서 최대값을 구했는데 여기서부터 문제였다. 객체의 value에 대한 key값을 어떻게 찾을지가 난관이었다. 배열이었으면 indexOf와 같은 method가 있지만......
stackoverflow의 힘을 빌렸다. find라는 method를 이용하여 찾을 수 있었다.

function moreThanHalf(nums) {
  const newArray = nums.sort();
  const index = Math.floor(newArray.length/2);
  return newArray[index];
}

다음은 동기분의 풀이를 참고하였다. 풀이가 굉장히 심플하고 똑똑하다. 오름차순으로 정리하면 가장 많은 빈도수를 가진 숫자는 자연스럽게 중앙으로 위치할 것이다. 그러면 배열의 길이를 2로 나누면 그게 곧 가장 많은 빈도수를 가진 요소의 index가 된다. 배열의 길이가 홀수일수도 있기 때문에 Math.floor로 내림을 해준다.

좋은 웹페이지 즐겨찾기