<코드타카 2주차 02.>

강민수·2021년 12월 19일
0

Day 2

풀이 1

function moreThanHalf(nums) {
  const numCount = {};

  for (let i = 0; i < nums.length; i++) {
    numCount[nums[i]] ? numCount[nums[i]]++ : numCount[nums[i]] = 1;
  }

  for (key in numCount) {
    if (numCount[key] > nums.length / 2) {
      return Number(key);
    }
  }

  return 0;
}

먼저 nums 배열에 숫자가 몇 개씩 있는지 세기 위한 방법을 생각해 보았습니다.

  1. 변수

    nums 배열의 길이 100일 경우 100개의 변수를 선언해야 합니다. X

  2. 배열

    nums 배열에 [0, 1, 10000] 일 경우 요소가 10000개인 배열을 만들거나 [0, 0, 0] 이렇게 요소가 3개인 배열을 만들 수 있습니다.

    요소가 10000개인 배열을 만들기에는 낭비가 너무 심한 것 같고 요소가 3개인 배열을 만들기에는 어떤 요소가 어떤 값을 나타낼지 확실히 보여주기 힘듭니다.

  3. 객체

    그래서 저희는 'numCount라는 객체를 선언해주고 nums 배열 요소의 값을 객체의 키로 사용하는 것이 좋겠다' 라고 결론을 내렸습니다.

숫자 개수 세기

for (let i = 0; i < nums.length; i++) {
  numCount[nums[i]] ? numCount[nums[i]]++ : numCount[nums[i]] = 1;
}

처음에는 반복문을 두 번 사용해서 한 번은 객체를 초기화 하고 한 번은 개수를 세었는데 다른 조에서 삼항 연산자를 사용해 반복문 하나로 해결하는 것을 보고 저희 조도 이렇게 바꾸었습니다.

반목문을 nums.length 만큼 돌며 nums 배열의 요소 값이 객체의 키에 없으면 키를 추가해 주며 값을 1 로 넣어주고 키가 있다면 그 값을 +1 해줍니다.

과반수가 넘는 숫자 찾기

for (key in numCount) {
  if (numCount[key] > nums.length / 2) {
    return Number(key);
  }
}

for in 문을 사용해 객체를 돌며 key에 해당하는 값이 nums 배열 전체 요소 개수의 1/2 보다 큰지 확인합니다.

이 조건을 만족하면 값에 해당하는 key는 과반수인 숫자입니다.

그래서 이 조건을 만족하는 key 를 리턴해줍니다.

풀이 2

function moreThanHalf(nums) {
  const counts = {};

  nums.forEach((num) => {
    counts[num] ? counts[num]++ : counts[num] = 1;
  })

  const filteredCount = Object.entries(counts).filter((element) => (element[1] > nums.length /2))

  return (filteredCount? Number(filteredCount[0][0]): 0)
}

풀이 1과 푸는 방식은 똑같습니다.

쓰던 것만 쓰지 말고 많이 안 써본 메서드를 사용해보려고 팀원들 모두 얘기해 본 결과 filter를 사용해서 풀어보기로 결정이 나 filter 메서드를 사용해서 풀어보았습니다.

저는 이번에 filter 메서드를 사용하기 위해 새롭게 배운 것이 있는데요, Object.entries()라는 메서드입니다.

Object.entries() 메서드를 사용하면 객체의 키와 값을 나누어 배열로 리턴해줍니다.

const obj = {
a: 1,
b: 2,
};

console.log(Object.entries(obj)); // [['a', 1], ['b', 2]]

filter 메서드를 사용하기 위해서 일단 객체를 배열로 만들어주어야 하는데 key와 값 모두 알아야 하기 때문에 Object.entries 메서드를 사용했습니다.

값이 nums.length의 절반보다 큰 지 비교해 큰 값이 있으면 해당하는 key와 값을 filteredCount에 담아주고 그 값을 이용해 return 해 주었습니다.

profile
개발도 예능처럼 재미지게~

0개의 댓글