
문제 설명
Medium

- 문자열 배열 단어와 정수 k가 주어지면 가장 자주 사용되는 k 문자열을 반환합니다.
- 가장 높은 빈도에서 가장 낮은 빈도로 정렬된 답변을 반환합니다. 빈도가 같은 단어를 사전순으로 정렬합니다.
접근
첫번째.
var topKFrequent = function(words, k) {
let obj = {}
let result = []
words.forEach((val, idx)=>{
if (obj[val] === undefined) {
obj[val] = (obj[val] | 0) + 1;
} else {
obj[val] = obj[val] + 1;
}
});
let max = 0;
let sortable = []
for (var name in obj) {
if (max <= obj[name]) {
max = obj[name];
}
sortable.push([name, obj[name]]);
}
};
- forEach 함수를 이용해 obj = { i: 2, love: 2, leetcode: 1, coding: 1 } 오브젝트의 개수를 찾는다.
- 오브젝트 value 값을 기준으로 [ [ 'i', 2 ], [ 'love', 2 ], [ 'leetcode', 1 ], [ 'coding', 1 ] ] 내림차순 정렬한다.
- 개수 k 를 기준으로 for문 통해 리턴한다.
- 하지만... 결국 풀지 못했다. (조건 중. 가장 높은 빈도 + name이 사전순으로 정렬되어야 한다.)
두번째.
var topKFrequent = function(words, k) {
let obj = {}
words.forEach((val, idx)=>{
if (obj[val] === undefined) {
obj[val] = (obj[val] | 0) + 1;
} else {
obj[val] = obj[val] + 1;
}
});
const result = Object.keys(obj).sort((a, b) =>
obj[a] == obj[b] ? (a < b ? -1 : 1) : obj[a] > obj[b] ? -1 : 1
);
return result.slice(0, k);
};
- forEach 함수를 이용해 obj = { i: 2, love: 2, leetcode: 1, coding: 1 } 오브젝트의 개수를 찾는다.
- sort 함수를 통해 조건을 2개 넣는다.
- obj[a] == obj[b] 가 같으면 val 값 내림차순 그리고, (a < b) 즉 사전적 정렬 오름차순으로 정렬한다.
- 그리고 obj[a] != obj[b] 가 같지 않으면, val 값 오름차순으로 정렬한다.
후기.
hashmap + sorting 문제로, obj key를 이용한 정렬이 실무에서도 아주 유용하게 쓰일 것으로 생각되며, 함수들의 case들을 많이 접하고 복습해야겠다.
Top K Frequent Words - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com