Code Kata#10 ***(객체에 반복되는값 저장key:value)

Hyunjun Kim
akiakma
Published in
3 min readMay 12, 2020
#문제
nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3]
k = 2
return [1,2]
nums = [1]
k = 1
return [1]

문제의 내용은 간단하다 num과 k가 인자로 주어지는데 제일 많이 반복되는 숫자가 무엇인지 k갯수만큼 알려주는것이다 nums=[1,1,1,2,2,3]의 경우 1:3, 2:2, 3:1 각각 다음의 수만큼 반복된다.

문제의 핵심은 반복되는 숫자를 객체로 만들어준다(key:value). 그리고 가장 많은 숫자를 갖고있는 value를 찾아서 오름차순으로 정리해준다. 마지막으로 k의 갯수만큼 추출해주면 끝.

문제 풀이의 내용을 자세하게 설명해보면 다음과 같습니다요.

  1. 함수에 인자로 들어갈 num과 k가 선언되고 값이 초기화됩니다.
  2. topK라는 함수가 선언됩니다. 매개변수로 nums,k를 받을수 있습니다.
  3. obj라는 빈 객체를 생성해줍니다.
  4. 반복문이 만들어집니다. 반복문의 내용을 간략히말하면 obj객체안에 key:value형태로 1이 3번 2가 1번 3이 3번 들어가게끔 한다는 것입니다.예를들어서 obj={ ‘1’: 3, ‘2’: 1, ‘3’: 2 } 이렇게 만들어질겁니다.
  5. 반복문은 0부터 6까지 0,1,2,3,4,5 총 다섯번 반복문이 실행될거에요.
  6. hasOwnProperty라는건 아래에서 자세히 설명하겠지만, obj에 nums[i]가 있다면 +1을 해주고
  7. obj에 nums[i]가 없다면 1을 만들어주는 작업을 하는것이죠.
  8. result에는 map함수를 돌려서 [ [ 1, 3 ], [ 2, 1 ], [ 3, 2 ] ] 다음과 같은 결과를 만들어주고요.
  9. sort함수를 실행하여 value값으로 오름차순으로 정리해줍니다. 다음과같이요. [ [ 1, 3 ], [ 3, 2 ], [ 2, 1 ] ] ← value값에 주목!
  10. getNums라는 배열안에 k만큼 반복문을사용해서 push로 k갯수만큼 key값을 넣어주고 return!
hasOwnProperty라는 함수는 객체에서 내가 찾으려는 key값이 있다면 true반환 없으면 false를 반환하게 만드는 놈입니다.
내림차순
var arr = [10, 100, 400, 200, 1, 3];
arr.sort(function (a,b){
return b-a;
});
output:[ 400, 200, 100, 10, 3, 1 ]

지금 조금 헷갈리고 앞으로도 조심해야겠다고 생각이 드는 부분은 nums라는 배열이 주어지고 반복되는 숫자만큼 value값에 저장을 하는부분. 즉 객체를 만드는 부분에서 obj[nums[i]] = obj[nums[i]] + 1 이 부분들이 지금도 햇갈립니다. else부분에서 obj[nums[i]] = 0으로 선언해주고.. 그다음 obj[nums[i]] = obj[nums[i]] +1 이라고 해줬는데 각각의 obj[nums[i]]안에 어떻게 프로그램이 알아서 key값인지 value값인지 구별해내는것인지… 궁금하다.. 질문해야겠다 ,,

--

--