[TIL]Code Kata Week2 Day2

3549 단어 filterfilter

문제

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

예를 들어,

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

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

filter()
메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

처음문제를 보고 딱 떠오르는 점은 배열안에 더 많은 수를 찾는가 였다.그런데 문제를 다시 읽어보고 천천히 풀어보려 하니 배열 길이의 과반수가 넘어야 한다는 중요한 점을 찾게 되었다. 일단 접근한 방법으로는 배열의 요소를 같은 숫자들끼리 모아 몇개가 있는지 비교를 해주는 것이었다.비교를 한 후 더 많은 요소를 nums의 length를 나누기 2를 해서 비교하려고 했으나 중간에 요소들끼리 갯수를 비교하는 로직이 한번 더 들어가기 때문에 filter메서드를 검색해서 찾게 되었다.
메서드의 특징은 조건이 참 일 때만 요소를 배열로 반환해 주는 것이다.그럼 불필요하게 배열의 요소들끼리 비교할 필요가 사라지고 바로 배열의길이와 비교를 해주면 끝나는 것이다.

function moreThanHalf(nums) {
  // 여기에 코드를 작성해주세요.
  for(let i=0; i<nums.length; i++){
if(nums.filter( e => e === nums[i]).length > (nums.length / 2)) {
      return nums[i]
    }
  }
} 
console.log(moreThanHalf([1,1,1,1,3,3,3]))

좋은 웹페이지 즐겨찾기