코드카타 2주차 #2

김태현·2020년 11월 10일
0

코드카타

목록 보기
7/9
post-thumbnail

arr = [1,2,3,4] 를 인덱스가 있는 객체로 바꾸는 법
obj = {...arr}

과일은 영어로 fruite가 아니라 fruit다.

function animal_comment() {
  const arr = ["토끼", "강아지", "고양이", "얼룩말"];

  const obj = {};
  
  const arr2 = ["귀가 크다", "귀엽다", "할퀸다", "멋있다"];
  
  for(let i = 0; i < arr.length; i++) {
      let animal = arr[i];
      let comment = arr2[i];
      obj[animal] = comment;
  }
  
  return obj;
}

animal_comment();

오늘 문제

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

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2

  • 가정
    nums 배열의 길이는 무조건 2개 이상

풀이

function moreThanHalf(nums) {
  let count = nums.length;
  
  const map = {};
  if(nums.length == 1) return nums[0];
  
  for(let i = 0; i < nums.length; i++) {
    let number = nums[i];
    if(map[number]) { 
      map[number]++; 
      if(map[number] >= nums.length/2) return number;
    } else map[number] = 1; 
  }
}

moreThanHalf([2,2,2,1,1,2]);

우선 문제의 뜻은 배열 중에서 가장 갯수가 많이 들어있는 숫자를 반환하는 것이다!
그러기 위해서 먼저 배열의 길이를 변수 count에 담아주었다.
그리고 map 오브젝트를 선언했는데 여기에는 키로 숫자, 벨류로 숫자의 개수를 넣어줄거다~

if(nums.length == 1)

만약 nums 배열이 요소 하나밖에 없으면은 바로 첫번째 인덱스 값을 리턴해주고

그 후에 반복문을 돌린다

for(let i = 0; i < nums.length; i++) {
	let number = nums[i];
    if(map[number]) { // 이미 봤던 숫자
    	map[number]++; // ++ 더해줌
        if(map[number] >= nums.length/2) return number; // 과반수면 그 숫자를 return 함
    } else map[number] = 1; // 여기가 처음본 숫자는 갯수를 1로 설정
}

이 부분은 반복문 부분인데
우선 number라는 변수에 nums의 각각의 값을 넣어주고
객체를 만들어서 만약 map[number]가 true면은 즉, 0개가 아니라 개수가 있으면, 이미 봤던 숫자라면 개수를 추가해주고, 만약에 개수가 배열의 길이를 반으로 나눈 값보다 이상이면은 과반수 라는 뜻이니까 해당 숫자 number를 리턴해준다!
그리고 else는 처음 본 숫자이므로 갯수를 1로 저장시켜 둔다.

객체에서 .(dot notation)을 쓸때는 주로 값에 접근을 할때고, []을 쓸때는 반복문의 변수나 그런걸 사용할 필요가 있을때 사용한다.

느낀점
객체, 배열 왔다갔다 하는게 아직도 어렵다

profile
프론트엔드 개발자

0개의 댓글