[codekata]Week2_Day2

문제

숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2

가정
nums 배열의 길이는 무조건 2개 이상


풀이

  1. 배열에 존재하는 숫자들의 개수 세기: 빈 객체를 만들고 배열을 순회하면서 배열의 요소들을 key로 객체에 접근 -> undefined를 반환할 경우 처음 만나는 요소이므로 value를 1로 해서 객체에 추가, 이미 존재할 경우 value + 1
  2. 완성된 객체를 순회하면서 value가 과반수(배열 길이 / 2)보다 클 경우 key를 리턴
function moreThanHalf(nums) {

  let numsObj = {};
  let majority = nums.length / 2;

  for (let num of nums) {
    numsObj[num] == undefined? numsObj[num] = 1 : numsObj[num]++;
  }

  for (let key in numsObj) {
    if (numsObj[key] > majority) {
      return Number(key); //문자열인 key를 숫자로 바꾼 후 리턴해야함!
    }
  }

}