/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
// 배열에서 가장 많이 나온 숫자를 출력해야함.
const map = new Map();
for(let i = 0; i < nums.length; i++){
// Map 객체가 가지고 있지 않다면 1로 설정
if(!map.has(nums[i])){
map.set(nums[i],1);
continue;
}
// Map 객체가 가지고 있다면 기존 숫자에서 1 증가
map.set(nums[i], map.get(nums[i]) + 1);
}
// 비교 연산을 위해 Map 객체의 초기 최대값을 가지는 key, value 설정
// 즉, Map 객체 가장 위에 있는 key, value를 설정한 것.
let maxKey = map.keys().next().value;
let maxVal = map.values().next().value;
// Map 객체는 entries()로 뽑아내도 배열이 아니기 때문에 spread operator 사용
[...map.entries()].forEach((item) => {
if(maxVal < item[1]){
maxKey = item[0];
maxVal = item[1];
}
});
// 최대값이 아닌, 최대값을 가지는 key가 궁금한 것이므로 maxKey 반환
return maxKey;
};
필자는 Map 객체를 활용하여 진행했다.
가장 많은 개수의 원소를 얻기 위해서는, 각 원소 값이 몇 개가 있는지 알아야하는데
바로 생각나는 것이 바로 key, value를 활용하는 것이었다.
보통은 일반 객체로 해도 충분하다고 생각되지만,
Map 객체가 특정 key를 검색할 때 훨씬 빠르다고 알고 있었기 때문에 Map 객체를 사용하는 것으로 했다.