문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
가정
nums 배열의 길이는 무조건 2개 이상
문제에 대해서는 forEach 메소드를 사용했다.
이부분은 참고로만 알고 있어도 좋을 것 같다.
값을 도출하는데에는 큰 의미는 없지만 참고해서 알게되면 흐름에 대해서 이해할 수 있게된다.
2. key 값은 배열 요소의 값 value의 값은 요소의 값이 몇 번이 도출됐는지를 알 수 있다.
3. value의 값을 Math.max 메소드를 사용하여 최대로 나온값을 알 수 있다.
다시 객체를 Object.entries 메소드를 사용하면 객체의 값을 key값와 value값이 모두 배열화 되게 된다.
반복문과 조건문을 활용하여 배열의 2번째해당하는 값 [i][1]
이 value의 값이 최대값과 같을때 배열의 [i][0]
값을 Number 메소드를 활용하여 반환하면 배열의 요소가 어떤것이 갯수를 보았을때 과반수 이상인 숫자에 대하여 알 수 있다.
코드타카 메이트분이 거의 다 해놓으셨는데 let result ={};
가 함수 밖으로 해놓아서 원하는 값에서 작동상 이상하지는 않지만 결함이 있긴 했었다. 정확한 방법을 위해서는 result의 초기값을 함수 안에 넣었더니 결함없이 문제를 해결할 수 있었다.
다른분들의 의견도 여기에 잘 레퍼런스로 넣어야겠다.
우리가 작성하여 완성된 코드는 아래와 같다.
⬇️ 내가 작성한 코드
function moreThanHalf(nums) {
let result = {};
nums.forEach((x) => {
if (result[x]) {
result[x] = result[x] + 1;
} else {
result[x] = 0 + 1;
}
});
// console.log(result) // { '2': 1, '3': 2 }
const resultValue = Object.values(result);
// console.log(resultValue) // [ 1, 2 ]
const resultMaxValue = Math.max(...resultValue);
// console.log(resultMaxValue) // 2
const resultarr = Object.entries(result);
// console.log(resultarr) // [ [ 'a', 2 ], [ 'b', 1 ] ]
for (i = 0; i < resultarr.length; i++) {
if (resultarr[i][1] === resultMaxValue) {
return Number(resultarr[i][0]);
}
}
}
const final = moreThanHalf([5,5,5,5,4,4,4,5,6,6,6])
console.log(final)
⬇️ 다른사람이 작성한 코드