nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3], k = 2 return [1,2] nums = [1] k = 1 return [1]
문제를 보자마자 객체로 접근해야겠다는 생각을 했다. 배열로 접근할 생각도 했으나 그렇게 하면 어떤 수가 얼만큼 있는지 파악하기가 쉽지 않겠다고 느꼈다.
그런데 난관은 그 다음에 있었당...
객체로는 만들었는데, 객체 안에서 밸류값의 내림차순으로 요소들을 어떻게 나열해야할지 몰라 난감했다. 신나게 구글링을 했지만 뾰족한 수는 보이지 않아 이틀연속으로 재상님께 SOS를 청했다.
function topK(nums, k) {
// 여기에 코드를 작성해주세요.
const obj = {}
for (num of nums) {
if(obj[num] !== undefined){
obj[num]++;
} else{
obj[num] = 1
console.log(obj)
}
}
const arr = Object.keys(obj).sort(
function(a,b){return obj[b] - obj[a]})
let result = arr.slice(0, k)
return result.map(x => Number(x))
}
아름답다....
sort를 객체에도 쓸 수 있다는 사실...! 그 내부에 함수를 불러 내림차순으로 깔끔하게 정리할 수 있었다.
요즘 위스타그램 마무리를 하고 리액트를 공부하면서 코드카타에 신경쓸 겨를이 없어지고 있당... 그래서 조금 시도하다가 안되면 바로 동기들한테 달려가는 습관이 생긴 것 같아 아쉽다. 그래도 타인의 코드를 보면서 배우는 점도 많다. 그 발란스를 잘 잡는 것이 중요하다고 생각한다.