[CodeKata] Day7

yoonee·2021년 10월 31일
0

JavaScript

목록 보기
8/8
post-thumbnail

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

function moreThanHalf(nums) {
  const result = {};
  
  nums.forEach(num => {
    if(result[num]){
      result[num]=result[num]+1;
    }else{
      result[num]=1;
    }
  }) // 빈 객체를 만들어서 각 key값의 value값을 갯수로 담아준다.
  
  console.log(result); // { '1': 3, '2': 4 }
  
  for(let i in result){
    if(result[i] > nums.length/2){
      return Number(i); // 2
    }
  } // 객체에서 사용 될 수 있는 for in문을 사용하여,value값이 nums의 길이 반보다 
}// 큰 값을 찾아준다. 여기서 Number()메서드를 사용 한 이유는, 객체의 key값인 i는 
// 스트링으로 반환되기때문에, 넘버로 바꿔주기 위해서 이다.

moreThanHalf([1,2,1,1,2,2,2]);

연정님께서 알려주신 코드였는데,
이렇게 배열을 객체로 만들어서 원하는 값을 추출할 수 있다는 점에서
조금 더 쉽게 접근할수 있다는걸 알게되었다 연정님 짱~

function moreThanHalf(nums) {
let halfOfNums = nums.sort();
//[ 1, 1, 1, 2, 2, 2, 2 ]
let index = Math.floor(halfOfNums.length/2); // 3
return halfOfNums[index];
}

moreThanHalf([1,2,1,1,2,2,2]);

🏁 sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.

"바나나"는 "체리"앞에옵니다. 숫자 정렬에서는 9가 80보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 "80"은 유니 코드 순서에서 "9"앞에옵니다.
원 배열이 정렬되는 것에 유의하세요. 복사본이 만들어지는 것이 아닙니다.

  • sort()메서드를 통하여 nums를 유니코드 순서에 맞게 정렬한다.
  • 과반수인 값을 찾기 위해 길이에서 2를 나누고, Math.floor() 메서드로 정수를 반환한다.
    ( /2 를 한 3.5번째의 값은 무조건 정렬을 했기때문에 과반수인 숫자입니다~)

0개의 댓글