5/4 CODE KATA #7

5901 단어 code kataTILTIL

CODA KATA

Problem

숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,

nums = [3,2,3]
return 3
//
nums = [2,2,1,1,1,2,2]
return 2

nums 배열의 길이는 무조건 2개 이상입니다.



Code

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), 즉 과반수에 대한 조건을 전혀 생각하지 못하고 접근했었다.(단순한건데 왜 생각을 못했는지 참....)

좋은 웹페이지 즐겨찾기