문제
문제 해결 방법 구상
1) 모든 인자가 (a+bi), (c+di) 라고 할때 모든 결과 값은 ac+adi+cbi+bdi^2 형태로 나옵니다. i^2 는 -1 이고 리턴값은 string 이므로 이런 형태가 됩니다. ac + (ad+cb)i + -(bd)
2) 모든 인자는 a + bi 형태이므로 + 를 기준으로 쪼개서 계산을 하기로 했습니다.
function topK(nums, k) {
let sortedObj = [];
let result = [];
let numObj = {};
for (let i of nums) { // 받은 인자를 가지고 숫자:갯수 로 구성된 객체 numObj를 생성
numObj[i] ? (numObj[i] += 1) : (numObj[i] = 1);
}
for (let key in numObj) { // 객체를 [숫자, 갯수] 를 값으로 하는 배열로 변환
sortedObj.push([key, numObj[key]]);
}
let a = sortedObj.sort(function (a, b) {
return b[1] - a[1]; // 배열을 객수기준 내림차순으로 정렬
});
for (let i of a) {
result.push(i[0]); // 정렬된 배열의 0번 index 값(=숫자) 만 배열로 변환
}
return result.slice(0, k).map((i) => i * 1); // 변환한 배열의 앞에서부터 k 개만큼 잘라내고 숫자형으로 변환하여 리턴
}
작성 후 느낀점
1) 문제 해결을 위해 배열 <-> 객체 전환이 꽤 잦은데 이럴 때 원하는 값을 뽑아내는 것이나, 정렬하는 것 등 데이터를 가공하는 방법에 대해 좀 더 알아봐야 할 것 같다