[Codekata] 알고리즘 week2-2

HyeLin·2021년 10월 28일
0
post-thumbnail

[문제]

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

[해답]

function moreThanHalf(nums) {
  let answer;
  const setNums = new Set(nums);
 const numsObject = {};
  
  	for(let value of setNums) {
    	numsObject[value] = 0
  }
  	for(let i=0; i< nums.length; i++) {
    	numsObject[nums[i]] += 1
  }
  	for(let key in numsObject) {
    	if(numsObject[key] > nums.length/2) {
     		 answer = Number(key)
    }
  }
  	return answer;
  }

set 객체
중복을 제거한 값들의 집합
ex) let MySet = new Set();

특정요소 추가:add;
ex) mySet.add(1); // set{1}
특정요소 확인:has;
ex) mySet.has(1) //true;
특정요소 제거:delete;
모든요소 제거:clear;

const setNums = new Set(nums);
  1. Set객체를 이용하여 배열의 중복된 값을 제외한 값들의 집합을 변수에 넣어준다.
    ex) nums = [4,5,6,7,4,4,5] -> [4,5,6,7];
 const numsObject = {};
  
  	for(let value of setNums) {
    	numsObject[value] = 0
  }
  1. 빈배열을 선언해준 후, for..of 를 사용하여! setNums[4,5,6,7]를 돌면서 numsObject[4]=0,numsObject[5]=0... 각 숫자의 value값을 0으로 만들어준다.
for(let i=0; i< nums.length; i++) {
    	numsObject[nums[i]] += 1
  }

3.원래 배열 nums를 돌면서 nums[0]=4, numsObject[4]에 1을 추가한다... 또 돌면서 나오는 숫자마다 1씩 추가한다.......^^ 내 언어의 한계쓰 ^^


for(let key in numsObject) {
    	if(numsObject[key] > nums.length/2) {
     		 answer = Number(key)
    }
  }
  	return answer;
  1. numsObject = {"4":3, "5":2, "6":1, "7":1} 상태이다. 여기를 또 돌면서 값이 원래 배열 nums길이의 반보다 크다면 (과반수라면) answer 변수에 key값을 넣어주어 반환한다. 이때, 키 값이 string 형태이기 때문에 Number를 이용해 수로 변환시킨다!!!!!!!!!!!!!

답은..... 4 ^^

profile
개발자

0개의 댓글