자바스크립트 배열 속 과반수 찾기

kler_HJ·2020년 4월 15일
0

JS

목록 보기
6/8

1. 문제

숫자로 이루어진 배열을 매개변수로 전달받고, 배열 속 과반수의 숫자를 반환하는 함수.

nums = [1, 1, 2, 5, 5, 5]
// majorityNum(nums) ==> return 5

2. 알고리즘

1) 배열 속 숫자와 각 숫자의 등장 횟수 Object로 맵핑하기.

const majorityNum = (nums) => {
  let numsObj = {};

  // nums배열 탐색하며 객체에 처음 등장하는 숫자는 1, 그외는 ++
  for (let num of nums) {
    numsObj[num] == undefined ? numsObj[num] =  1 : numsObj[num]++;
  }
  
  /* 
      numsObj == {
        "1": 2,
        "2": 1,
        "5": 3
      }
  */
}

2) Object 속 가장 큰 Value의 Key값 return.

const majorityNum = (nums) => {
  let numsObj = {};

  // nums배열 탐색하며 객체에 처음 등장하는 숫자는 1, 그외는 ++
  for (let num of nums) {
    numsObj[num] == undefined ? numsObj[num] =  1 : numsObj[num]++;
  }
  
  // Object.keys(numsObj) == [ "1", "2", "5" ]
  
  // Array의 reduce()를 활용,
  // numsObj객체 value의 최대값에 해당하는 key값 구하기 (majority)
  let majority = Object.keys(numsObj).reduce((pre, cur) => {
    return numsObj[pre] > numsObj[cur] ? pre : cur
  })
  
  return Number(majority) // String -> Number
}
profile
더 나은 제품과 디자인에 대해 고민하기를 즐기는 Front-end 개발자입니다.

0개의 댓글