문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.예를 들어, nums = [3,2,3] return 3 nums = [2,2,1,1,1,2,2] return 2 nums = [3,2,3] return 3 nums = [2,2,1,1,1,2,2] return 2 가정 nums 배열의 길이는 무조건 2개 이상
function moreThanHalf(nums) {
// 여기에 코드를 작성해주세요.
let newArray = [];
let a = 0; //최대값을 담는 변수
let result; //최대값을 가지고 있는 변수의 length가 아닌 실제 요소
for(let i = 0; i < nums.length; i++){
let newLength = nums.filter(element => nums[i] === element).length;
if (newLength > a) {
a = newLength;
result = nums[i];
}
} return result
}
nums
배열에서 각각 해당 index값을 추출해서 비교해본다.filter
를 비교해서 nums
의 index를 다 비교해본다.let newLength = nums.filter(element => nums[i] === element).length;
여기 아래에 콘솔을 찍어보면 각각 index값이 중복되는 길이가 나온다. ex) nums[3,1,4,3] => 2,1,1,2function moreThanHalf(nums) {
if (nums.length >= 2) {
const major = {}
nums.filter((el, index) => {
major[el] = (major[el])? (major[el]+1) : 1;
});
const keys = Object.keys(major);
const values = Object.values(major);
const maxValues = Math.max(...values);
for (let i in keys) {
if (major[keys[i]] === maxValues) {
return keys[i];
}
}
}else{
return 0;
}
}
filter
를 최대한 사용할려고 해보았다. 그러나 아직 filter
에 들어가는 키값을 활용한 자유로운 로직을 짜는데 버퍼링이 있다. 좀더 친해져야겠다.filter
를 기준으로 로직을 맥락은 같았다.