TIL.32 js 코드카타 3.

Haiin·2020년 12월 8일
0

위코드 자바스크립트 코드카타 3.



문제

문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
!가정
nums 배열의 길이는 무조건 2개 이상



풀이

  • 처음의 접근은 배열에서 첫번째 숫자와 두번째 숫자를 비교하여 다르면 그 수를 원래 배열에서 필터링하는 방법으로 접근하였다. 이 접근의 한계는 필터링한 배열의 개수를 length메서드로 비교한 후 다시 배열의 숫자를 반환하는데서 발생했다.
  • 아래는 모범답안. 일단, 접근은 for문을 두번 시행하여 첫번째 숫자를 배열의 모든 숫자와 비교하는 것으로 시작하였다.
  • 숫자가 같다면 1을 계속 더해가는 방식으로 나중에 그 숫자가 배열의 갯수의 반 이상을 넘는다면 어느 숫자보다도 많은 것이므로 그때의 배열의 인덱스를 이용하여 숫자를 반환한다.
function moreThanHalf(nums) {
  for (let i = 0; i < nums.length; i++) {
    let sum = 0;   
    for (let j = 0; j < nums.length; j++ ) {
      if (nums[i] === nums[j]) {
        sum += 1;
      }
    }
    if (sum > nums.length/2) {
      return nums[i];
    }
  }
}
moreThanHalf([1,1,1,1,2,2,2,2,2,2,2,1])
//2


0개의 댓글