❓문제
- 주어진 배열에서 과반수를 차지하는 숫자를 찾아서 반환하는 로직 구현
- 예를 들어,
[1, 1, 2, 2, 2] 의 경우 2를 반환
[4, 3, 4, 4, 4, 1] 의 경우 4를 반환function moreThanHalf (nums) { };
🔓 (문제 파악) 주어진 배열 내에 중복되는 요소들의 숫자를 파악해야한다.
🔑 (해결 방안)
forEach
) 새 객체의 key로 할당한다.let numOfSameEl = {};
function moreThanHalf (nums) {
nums.forEach((x) => {
numOfSameEl[x] = (numOfSameEl[x] || 0) + 1;
// key // value
});
}
🔓 (문제 파악) 과반수가 넘는 숫자를 반환한다.
🔑 (해결 방안) 과반수가 넘는지 확인하기 위하여
numOfSameEl
객체의 모든 value 값을 더하여function moreThanHalf(nums) {
let numOfSameEl = {};
nums.forEach((x) => {
numOfSameEl[x] = (numOfSameEl[x] || 0) + 1;
});
let sum = 0;
let result;
for (el in numOfSameEl) { // for...in 반복문을 통해 객체의 key에 접근
sum += numOfSameEl[el]; // 객체의 모든 value를 합산한 뒤,
if (numOfSameEl[el] > sum * 0.5) { // sum의 절반을 초과하는 value를 반환
result = Number(el);
}
}
return result;
}
function moreThanHalf(nums) {
let numOfSameEl = {};
nums.forEach((x) => {
numOfSameEl[x] = (numOfSameEl[x] || 0) + 1;
});
let sum = 0;
let result;
for (el in numOfSameEl) {
sum += numOfSameEl[el];
if (numOfSameEl[el] > sum * 0.5) {
result = Number(el);
}
}
return result;
}
const arr = [2, 2, 1, 1, 1, 2, 2];
console.log(moreThanHalf(arr)); // 2