[CodeKata] MoreThanHalf

5ERN·2022년 12월 29일
0

CodeKata

목록 보기
2/2

>조건

숫자로 이루어진 배열인 nums를 인자로 전달한다.
숫자 중에서 과반수가 넘은 숫자를 반환하라!
(단, nums 배열의 길이는 무조건 2개 이상!)

ex)
nums = [3, 2, 3]
-> return 3
ex2)
nums= [2, 2, 1, 1, 1, 2, 2]
-> return 2

>해법

obj라는 변수를 빈 객체로서 선언한다

const obj = {};
nums.map(num => obj[num] !== undefined ? obj[num] += 1 : obj[num] = 1);

이번에 짝인 지연님께 도움을 많이 받았다
.map 메소드, 삼항연산자를 사용하여 키값을 설정하고 undefined가 아닐 시, 키의 밸류로서 1을 플러스하고, 그 반대의 경우 1을 할당해준다

const result = Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);

이를 .keys , .reduce 메소드를 이용하여
a 와 b 를 설정하고 obj[a]의 값과 obj[b]의 값을 비교하여 obj[a]가 더 큰 경우, a를 남기고 그 외의 경우 b를 남긴다
이 공식이 .reduce 메소드에 의해 반복되면, 가장 많은 수의 숫자값이 나오게 된다!

return Number(result);

위에서 문자열화 되었기에, 이를 다시 Number()로 숫자로 바꾸어주면, 원하던 결과가 나오게 될 것이다!

profile
응애개발자

0개의 댓글