Code-kata 7일차
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
function moreThanHalfObject(nums) {
const result = {};
nums.forEach((x) => {
if (result[x]) {
result[x] = result[x] +1;
}
else {
result[x] = 0 + 1;
}
})
return result
}
function moreThanHalf(nums) {
let obj = moreThanHalfObject(nums);
let arr = Object.values(obj);
let max = Math.max(...arr)
return Number(getKeyByValue(obj, max));
}
어떻게 할지 고민하다가 객체를 만들기로 결심했다. 각 숫자를 key로 하고 그 개수를 value로 해서 풀어나가면 좋을 것 같다고 생각했다. 그리고 value들을 배열로 만들어서 최대값을 구했는데 여기서부터 문제였다. 객체의 value에 대한 key값을 어떻게 찾을지가 난관이었다. 배열이었으면 indexOf와 같은 method가 있지만......
stackoverflow의 힘을 빌렸다. find라는 method를 이용하여 찾을 수 있었다.
function moreThanHalf(nums) {
const newArray = nums.sort();
const index = Math.floor(newArray.length/2);
return newArray[index];
}
다음은 동기분의 풀이를 참고하였다. 풀이가 굉장히 심플하고 똑똑하다. 오름차순으로 정리하면 가장 많은 빈도수를 가진 숫자는 자연스럽게 중앙으로 위치할 것이다. 그러면 배열의 길이를 2로 나누면 그게 곧 가장 많은 빈도수를 가진 요소의 index가 된다. 배열의 길이가 홀수일수도 있기 때문에 Math.floor로 내림을 해준다.
Author And Source
이 문제에 관하여(Code-kata 7일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@klqwrx7004/Code-kata-7일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)