코드카타 #09
문제
nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
풀이
let nums = [1,1,1,2,2,3];
let k = 2;
function topK(nums, k) {
let obj = {};
for (let i in nums) {
nums[i] in obj ? obj[nums[i]] += 1 : obj[nums[i]] = 1
}
let arr = Object.keys(obj).sort((a, b) => {
return obj[b] - obj[a];
})
return arr.slice(0, k).map(x => parseInt(x));
}
console.log(topK(nums, k)) // 결과값 [1, 2]
풀이 과정
- 배열에서 같은 숫자, 글자 등 같은 값의 갯수를 서로 비교할때는 객체형이 편하므로
obj라는 빈 객체를 선언해 줍니다
for in문을 돌려서 요소 하나하나를 객체의 key값과 비교하고 삼항 연산자를 사용해 key값에 있다면 1을 증가하고 없다면 객체 key에 넣어줍니다.
arr라는 변수에 Object.keys를 이용해 key값만 불러옵니다
- 불러온값을 내림차순 정렬하기 위해
sort함수를 사용해 줍니다.
- 내림차순으로 정렬된 변수
arr에 slice 메서드를 사용해 0번째 인덱스부터 k번째 까지 잘라줍니다
- 잘라주면 ["1", "2"] 처럼 안에 값들이 스트링 형태로 되어 있어서
parseInt()를 사용해 숫자형으로 바꿔서 return해줍니다
Author And Source
이 문제에 관하여(코드카타 #09), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@xodid157/코드카타-09
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let nums = [1,1,1,2,2,3];
let k = 2;
function topK(nums, k) {
let obj = {};
for (let i in nums) {
nums[i] in obj ? obj[nums[i]] += 1 : obj[nums[i]] = 1
}
let arr = Object.keys(obj).sort((a, b) => {
return obj[b] - obj[a];
})
return arr.slice(0, k).map(x => parseInt(x));
}
console.log(topK(nums, k)) // 결과값 [1, 2]obj라는 빈 객체를 선언해 줍니다for in문을 돌려서 요소 하나하나를 객체의 key값과 비교하고 삼항 연산자를 사용해 key값에 있다면 1을 증가하고 없다면 객체 key에 넣어줍니다.arr라는 변수에 Object.keys를 이용해 key값만 불러옵니다 sort함수를 사용해 줍니다.arr에 slice 메서드를 사용해 0번째 인덱스부터 k번째 까지 잘라줍니다parseInt()를 사용해 숫자형으로 바꿔서 return해줍니다Author And Source
이 문제에 관하여(코드카타 #09), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xodid157/코드카타-09저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)