moreThanHalf 함수

Luluzoe·2021년 10월 31일
0
post-thumbnail

문제

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

예를 들어,

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

가정

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

어떻게 접근할 것 인가?

  • 과반수가 넘은 숫자는 결국 배열에서 개수가 가장 많은 요소인가?
  • foreach() reduce() map() 을 이용해서 요소와 요소의 개수를 빈 객체 담을 수 있다. 그렇지만, 보다 쉬운방법이 있을 것 같다.
  • 배열의 길이로 접근한다면 과반수는 절반 이상인 길이.
  • 배열의 요소 한 종류만 모아놓고 배열길이를 구해보자.

나의 코드

function moreThanHalf(nums) {

for (let i=0; i<nums.length; i++) {
    if (nums.filter(el => el === nums[i]).length > (nums.length / 2)) {
      return nums[i]
    }
  }
}

for문을 이용하여 배열의 요소에 접근한다.
filter함수를 이용해서 한 종류의 요소들만 모아주고, 그 배열의 길이를 구한다.
만약 그 길이가 전체 길이의 1/2 즉, 과반수가 넘는다면 그 요소를 반환하면된다.

마무리

이 문제는 과반수라는 단어에 집중하였으면 쉽게 풀었을 것 같다.
filter함수를 이용하여 한 종류의 요소들만 모을 수 있었다.
배열의 개수를 배열의 길이로 변환할 수만 있으면 쉽게 풀리는 문제였다.
문제에서 묻고자 하는 것을 잘 캐치하자.

0개의 댓글