nums
는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k
개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
나의 초안은...난리가 났었더랬다
분명 쉽게 풀릴 줄알았는데...아직 js문법에 나약한 나인가 보다.function topK(nums, k) { // 여기에 코드를 작성해주세요. let sortedNums = nums.sort(); let finalArr = []; for (let cnum of sortedNums) { let obj = {}; obj[cnum] = 1; finalArr.push(obj); } finalArr.forEach(function (value) { console.log(String(Object.keys(value))); }); // console.log(Object.entries(finalArr)); let oobject = Object.values(finalArr); console.log(oobject); oobject.sort(function (a, b) { return a[1] - b[1]; }); console.log("sorted : ", oobject); } console.log(topK([3, 1, 1], 2));
이것의 가장 문제는...Object안에서 key와 value를 뽑아 내고 그 value값으로 key를 정렬한 뒤 배열에 넣어...k갯수만큼 빼고싶은것! Object를 잘몰랐던 나... 굴레에 빠져버렸다...이중배열에 넣어서 정리한는 사람들도 있었지만...난 객체를 사용하고싶었다!! 지금은 숫자로만 배열이 들어오지만 나중에 문자배열이 들어올 경우를 대비하기 위해서!
function topK(nums, k) { let obj = {}; for (let num of nums) { if (num in obj) { //obj 객체의 key 값! 포함여부 확인! obj : [ [ '1', 3 ], [ '2', 2 ], [ '3', 1 ] ] obj[num] += 1; } else { obj[num] = 1; } } let sortedKey = Object.keys(obj).sort(function (a, b) { // 객체 value값으로 key 정렬 반환 return obj[b] - obj[a]; }); return sortedKey.splice(0, k).map((x) => parseInt(x)); //String key 값을 Int형으로 변환 반환할때 map돌리자! } console.log(topK([1, 1, 1, 2, 2, 3], 2));
if(속성key in obj){ ... }
또는 obj.hasOwnProperty(속성key)
before
if (Object.keys(left).indexOf(letter) > -1) { ... }
after
if (letter in left) { ... }
Object.keys(obj).sort(function (a, b) { //value기준으로 정렬시킨 뒤 key 배열 리턴
return obj[b] - obj[a]; //value 값 기준 내림차순
}
var myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"];
var removed = myFish.splice(3, 1);
console.log(removed); //[ 'mandarin' ]
console.log(myFish); //[ 'angel', 'clown', 'drum', 'sturgeon' ]
오 CodeKata글이 자주 올라오네요.
저도 3달 후면 알고리즘 공부하려고 하는데
참고하겠습니다