코드카타 #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.)