📅 22.10.13
📖 파트너 : 정관훈
문제설명 :
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
가정 :
nums
배열의 길이는 무조건 2개 이상
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
숫자 배열로 받은 인자를 객체로 키값으로 저장하여 for문을 돌면서 그 갯수를 축적하여 key값을 반환하는 방법으로 생각했다
function moreThanHalf(nums) {
obj = {};
let count = 1;
for(let i = 0; i < nums.length; i++){
if(!obj[nums[i]]){
obj[nums[i]] = 1;
}else {
obj[nums[i]] += count;
}
}
let arr = [];
for(let key in obj){
arr.push(obj[key]);
}
let max =Math.max(...arr)
const result = Object.keys(obj).find(key => obj[key] === max);
return Number(result);
}
이 코드를 짤 때 유의해야 할 점은
(!obj[nums[i]])
처음의 키값이 없을경우 value값을 설정을 해주어야 한다는 것이다obj[num[i]] += count
로 축적하는 코드를 짰는데 value값이 증감이 되지 않아 무엇이 문제인지 파악하는데 시간이 많이 소요됐다.find
메서드로 찾아 결과로 반환한다원래 객체로 담는다는 방법을 생각하기 전에 sort 메서드를 생각했었는데 처음엔 숫자가 2가지만 있을때 이것을 사용할 수 있다고 생각했다. 과반수의 단어 의미를 정확히 이해하지 못했기 때문이다. 과반수란 전체의 반이 넘는 수를 의미하므로 몇가지의 수가 있던 배열길이의 반 보다 큰 수은 무조건 과반수인 숫자가 차지할 것이다
function moreThanHalf(nums) {
const length = parseInt(nums.length/2);
nums.sort();
return nums[length]
}
이 코드를 짤 때 유의해야 할 점은
parseInt
를 써서 길이값을 정수로 반환하여 사용해야한다는 것이다