[TIL]_Code Kata (#7)

🌈 Code Kata [문제 해결능력 기르기]

🌀 문제

숫자로 이루어진 배열인 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) {
  // 여기에 코드를 작성해주세요.
  let result = 0; 
  for(let i=0; i<nums.length; i++) {
    let majorityCount = 0;
    for(let h=0; h<nums.length; h++) {
      if(nums[i] === nums[h]) {
        result = result + 1;
      }
      if(result > majorityCount) {
        majorityCount = result;
      }
    }
    if(result > nums.length / 2) {
      return nums[i];
    }
  }
}

👉 내가 작성한 코드로 돌렸을 경우에 처음 들어온 숫자 두개중에서만 답이 나와서 오답처리 되었다. 만약 배열에 [1,2,2,2,2,1,5,5,5,5,5,5,5] 이렇게 숫자들이 들어올 경우에 5가 답으로 나오지 않았다. ㅠㅠㅠㅠ 😱 그래서 구글링하고, 물어보면서 설명을 들은 결과👇


✏️ 정답 코드

var majorityElement = function(nums) {
    let res = 0, count = 0;
    for (let num of nums) {
        if (count === 0) {
            res = num;
            count++;
        } else {
             (num === res) ? count++ : count--;
        }
    }
    return res;
};

📌 내가 생각한 이 코드의 해설
👉 값을 담을 변수와, 숫자를 비교할 변수를 선언하고 모두 초기값을 0으로 설정했다.
👉 for..of로 반복문을 만들어주고 그 안에서 res와 num을 비교한 후 같다면 count++, 다른 값이 나올 경우 count--를 해주었다.
🔥 for..of문은 반복 가능한 객체에 대해서 반복하고 그 개별 속성 값을 반환한다.

좋은 웹페이지 즐겨찾기