숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
function moreThanHalf(nums) {
const result = {};
nums.forEach(num => {
if(result[num]){
result[num]=result[num]+1;
}else{
result[num]=1;
}
}) // 빈 객체를 만들어서 각 key값의 value값을 갯수로 담아준다.
console.log(result); // { '1': 3, '2': 4 }
for(let i in result){
if(result[i] > nums.length/2){
return Number(i); // 2
}
} // 객체에서 사용 될 수 있는 for in문을 사용하여,value값이 nums의 길이 반보다
}// 큰 값을 찾아준다. 여기서 Number()메서드를 사용 한 이유는, 객체의 key값인 i는
// 스트링으로 반환되기때문에, 넘버로 바꿔주기 위해서 이다.
moreThanHalf([1,2,1,1,2,2,2]);
연정님께서 알려주신 코드였는데,
이렇게 배열을 객체로 만들어서 원하는 값을 추출할 수 있다는 점에서
조금 더 쉽게 접근할수 있다는걸 알게되었다 연정님 짱~
function moreThanHalf(nums) {
let halfOfNums = nums.sort();
//[ 1, 1, 1, 2, 2, 2, 2 ]
let index = Math.floor(halfOfNums.length/2); // 3
return halfOfNums[index];
}
moreThanHalf([1,2,1,1,2,2,2]);
🏁 sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.
"바나나"는 "체리"앞에옵니다. 숫자 정렬에서는 9가 80보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 "80"은 유니 코드 순서에서 "9"앞에옵니다.
원 배열이 정렬되는 것에 유의하세요. 복사본이 만들어지는 것이 아닙니다.