Code Kata#10 ***(객체에 반복되는값 저장key:value)
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의 갯수만큼 추출해주면 끝.
문제 풀이의 내용을 자세하게 설명해보면 다음과 같습니다요.
- 함수에 인자로 들어갈 num과 k가 선언되고 값이 초기화됩니다.
- topK라는 함수가 선언됩니다. 매개변수로 nums,k를 받을수 있습니다.
- obj라는 빈 객체를 생성해줍니다.
- 반복문이 만들어집니다. 반복문의 내용을 간략히말하면 obj객체안에 key:value형태로 1이 3번 2가 1번 3이 3번 들어가게끔 한다는 것입니다.예를들어서 obj={ ‘1’: 3, ‘2’: 1, ‘3’: 2 } 이렇게 만들어질겁니다.
- 반복문은 0부터 6까지 0,1,2,3,4,5 총 다섯번 반복문이 실행될거에요.
- hasOwnProperty라는건 아래에서 자세히 설명하겠지만, obj에 nums[i]가 있다면 +1을 해주고
- obj에 nums[i]가 없다면 1을 만들어주는 작업을 하는것이죠.
- result에는 map함수를 돌려서 [ [ 1, 3 ], [ 2, 1 ], [ 3, 2 ] ] 다음과 같은 결과를 만들어주고요.
- sort함수를 실행하여 value값으로 오름차순으로 정리해줍니다. 다음과같이요. [ [ 1, 3 ], [ 3, 2 ], [ 2, 1 ] ] ← value값에 주목!
- 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값인지 구별해내는것인지… 궁금하다.. 질문해야겠다 ,,