숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,nums = [3,2,3] return 3 // nums = [2,2,1,1,1,2,2] return 2
nums
배열의 길이는 무조건2
개 이상입니다.
function moreThanHalf(nums) { const result = {}; // 중복값의 개수를 저장하기 위한 빈 객체를 지정 arr.forEach((x) => { if(result[x]){ result[x] += 1 // 빈 객체에 해당 숫자의 키값이 존재하면 개수 +1 } else { result[x] = 0; // 빈 객체에 해당 숫자의 키값이 존재하지 않다면 0으로 선언 후 result[x]++ // 1씩 개수 증가 } }); // result = { '2': 1, '4': 3, '6': 1 } for(const key in result){ // for.. in 사용 if(result[key] > arr.length / 2) { // 해당 숫자(key)의 개수(value)가 과반수를 넘을경우 return Number(key) // 키값을 숫자값으로 변환 후 바로 리턴(key는 string이기 때문) } } }; const arr = [2, 4, 4, 6, 4]; moreThanHalf(arr) // 4
예전에 forEach
, 혹은 reduce
으로 해당 요소의 중복 개수를 구하는 로직을 구현한 적이 있어 이를 응용해보았다.
처음 숫자마다의 중복 개수까지는 구현했지만, if(result[key] > arr.length / 2)
, 즉 과반수에 대한 조건을 전혀 생각하지 못하고 접근했었다.(단순한건데 왜 생각을 못했는지 참....)