숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
가정
nums 배열의 길이는 무조건 2개 이상
function moreThanHalf(nums) {
nums.sort();
const length = nums.length;
if (length % 2 === 0) {
return nums[length / 2]
} else {
return nums[(length - 1) / 2]
}
}
const result = moreThanHalf([2,2,1,1,1,2,2]);
console.log(result); // 2
문제에서 요구한 것은 배열의 요소 중 과반수를 넘는 요소를 출력하라는 것이다.
그렇다면 무작위로 나열되어 있는 배열을 정렬한 뒤에,
그 배열의 length를 구하고,
length를 2로 나누었을 때 나머지가 0인 경우와 그렇지 않은 경우를 구분하여 출력하면 된다.
2로 나누었을 때 나머지가 0이라는 것은 배열이 짝수개 라는 뜻이다.
여기서 나머지가 0일 때 nums[length/2] 를 출력하면 배열 요소 중 절반에서 바로 그 다음 요소가
출력된다.
만약 나머지가 1이라면 배열이 홀수개 라는 뜻이다.
여기서 나머지가 1일 때 nums[(length - 1) / 2]를 하면 배열 요소 중 정중앙에 있는 요소가 출력된다.
결국 배열이 짝수든, 홀수든 과반수인 요소를 출력할 수 있게 된다.
앞에서 sort( ) 메서드로 배열을 미리 정렬해두었기 때문에 쓸 수 있는 방법이다.
위에서 적용한 배열을 예로 들어보자.
먼저 nums.sort()로 인자로 넘겨받은 배열을 정렬한다.
배열을 정렬하면 [ 1, 1, 1, 2, 2, 2, 2 ] 가 된다.
이 배열의 legnth는 7이다.
7 / 2 의 나머지는 1이므로 if else 문에서 else에 해당된다.
nums[(length - 1) / 2] 는 nums[3]이다.
nums[3]은 2이므로 결과적으로 2가 출력된다.