[자바스크립트 알고리즘] 인자로 받은 배열의 엘리먼트 중, 갯수가 과반인 엘리먼트 구하기

eunjin·2020년 12월 8일
0

알고리즘 공부

목록 보기
6/7

1. 문제

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

예를 들어,

nums = [3,2,3]
return 3

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

가정

nums 배열의 길이는 무조건 2개 이상입니다.

2. 풀이

처음에는 문제에서 원하는 게 뭔지 이해하는 데 시간이 걸렸다. 모든 수의 average를 넘기는 엘리먼트를 반환하라는 건지 약간 헷갈렸다가, 갯수가 과반을 넘기는 엘리먼트를 리턴하라는 것을 이해하였다.

  1. 인자로 받는 배열의 엘리먼트를 하나씩 돌면서, 그 엘리먼트와 값이 같은 엘리먼트를 filter() 메서드로 분리하여 그 길이를 구한다.
  2. 그 길이가 처음에 인자로 받은 배열의 길이의 과반이면, 현재 확인하던 값을 리턴한다.
  3. 과반인 수는 배열에서 1개를 넘길 수 없으므로, 다른 가능성을 생각할 필요 없이 바로 확인하던 값만 리턴하면 된다.
function moreThanHalf(nums) {
  for (let i=0; i<nums.length; i++) {
    if (nums.filter((item) => item === nums[i]).length > (nums.length / 2)) {
      return nums[i]
    }
  }
}

console.log(moreThanHalf([3,2,3])) // 3
console.log(moreThanHalf([2,2,1,1,1,2,2])) // 2
console.log(moreThanHalf([1,2,3,1,2,3,2,3,3,3,3,3,3,3,3,3])) // 3
profile
빵굽는 프론트엔드 개발자

1개의 댓글

comment-user-thumbnail
2020년 12월 21일

잘 읽었습니다.

답글 달기