Code Kata - 5~6

park_kyo_su·2021년 6월 29일
0

Code Kata

목록 보기
4/4
post-thumbnail

Code Kata - Quiz 5

Code Kata - Quiz 6

문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
가정
nums 배열의 길이는 무조건 2개 이상

내 솔루션🧐

function moreThanHalf(nums) {
  // 여기에 코드를 작성해주세요.
  let newArray = [];
  let a = 0; //최대값을 담는 변수
  let result; //최대값을 가지고 있는 변수의 length가 아닌 실제 요소

  for(let i = 0; i < nums.length; i++){
    let newLength = nums.filter(element => nums[i] === element).length;
    if (newLength > a) {
      a = newLength;
      result = nums[i];
    }
  } return result
}

생각한 순서

  1. 숫자중에서 과반수가 넘는 숫자를 어떤 방식으로 구할 것인가?
  2. 숫자가 과반수가 넘는다면 들어온 nums 배열에서 각각 해당 index값을 추출해서 비교해본다.
  3. filter를 비교해서 nums의 index를 다 비교해본다.
  4. let newLength = nums.filter(element => nums[i] === element).length;여기 아래에 콘솔을 찍어보면 각각 index값이 중복되는 길이가 나온다. ex) nums[3,1,4,3] => 2,1,1,2
  5. i번째 인덱스가 a보다 크면 a에 그 값을 넣어준다. => 최대값을 구하는 중
  6. 그렇게 나온 최대값의 실제 요소를 (result)를 반환한다.

지수님 솔루션👏

function moreThanHalf(nums) {
  if (nums.length >= 2) {
    const major = {}
    nums.filter((el, index) => {
      major[el] = (major[el])? (major[el]+1) : 1;
    });
    const keys = Object.keys(major);
    const values = Object.values(major);
    const maxValues = Math.max(...values);
    for (let i in keys) {
      if (major[keys[i]] === maxValues) {
      return keys[i];
     }
    }
  }else{
    return 0;
  }
}

배운점

  • 이번 코드카타를 filter를 최대한 사용할려고 해보았다. 그러나 아직 filter에 들어가는 키값을 활용한 자유로운 로직을 짜는데 버퍼링이 있다. 좀더 친해져야겠다.
  • 다른분들이 적은 코드가 정말 다 제각각이지만 filter를 기준으로 로직을 맥락은 같았다.
profile
이사중 ! https://dpark-log.tistory.com/14

0개의 댓글