본문 바로가기

Algorithm(Javascript)

알고리즘 문제 7

배열에 들어있는 숫자들중에서 과반수가 넘는 숫자를 반환

 

문제에 접근하는 방법은 다양하지만 Set자료형을 통해서 문제를 해결했다. Set자료형은 받은 값에서 중복된값들을 제거한

결과값을 반환해준다. 

 

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
}

 

setNums라는 변수에 파라미터로 들어온 nums배열의 중복된값들을 제거한 결과를 할당해준다. numsObject라는 빈 객체를 생성하고

여기서 숫자의 개수를 카운팅할거다. 처음 for문은 setNums에 들어있는 값들을 키로 만들어서 value값은 0을 할당해줘서

초기화 시켜주는 작업이다.

 

다음 for문은 nums배열을 처음부터 순회하면서 그 값의 numsObject키의 vaule값을 1씩 올려준다.

이과정이 숫자가 몇개가 있는지 카운팅하는 작업이다. 그렇게 카운팅 작업이 다 끝나게되면 for...in문을 통해서 numsObject 키에 

접근해서 그 value값이 nums배열의 개수의 절반보다 크거나 같으면 과반수이기 때문에 맨 위에서 선언 변수 answer에다가

값을 할당해준다.

기본적으로 객체에 키값을 넣어줄때 문자열로 처리된 상태에서 하기때문에 다시 숫자형을 변형시켜줘서 answer에다가 할당해준것이다.

 

'Algorithm(Javascript)' 카테고리의 다른 글

알고리즘 문제 9  (0) 2021.10.28
알고리즘 문제 8  (0) 2021.10.27
알고리즘 문제 6  (0) 2021.10.25
알고리즘 문제 5  (0) 2021.10.22
알고리즘 문제 4  (0) 2021.10.21