Skip to content

Commit 64589d3

Browse files
committed
topKFrequent solution
1 parent 2d8a742 commit 64589d3

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// nums ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ์š”์†Œ k๊ฐœ ์ถ”์ถœํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
2+
// 1๋ฒˆ์งธ ์‹œ๋„
3+
function topKFrequent(nums: number[], k: number): number[] {
4+
const answer = [];
5+
6+
// 1. ๊ฐ ์š”์†Œ์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜์—ฌ ๋งต์œผ๋กœ ๋งŒ๋“ ๋‹ค.
7+
const countMap = new Map();
8+
for (let i = 0; i < nums.length; i++) {
9+
const cur = nums[i];
10+
countMap.set(cur, (countMap.get(cur) || 0) + 1);
11+
}
12+
13+
// 2. ์นด์šดํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
14+
const sorted = [...countMap].sort((a, b) => b[1] - a[1]);
15+
16+
// 3. ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ answer ์˜ ๊ธธ์ด๊ฐ€ k๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ Map ์„ ์ˆœํšŒํ•˜์—ฌ ์ถ”์ถœํ•œ๋‹ค.
17+
for (const [val] of sorted) {
18+
if (answer.length < k) answer.push(val);
19+
}
20+
21+
return answer;
22+
}
23+
24+
/* ๊ฐœ์„ ์ ?
25+
* Map ๊ณผ sort ์ด์™ธ์˜ ๋ฐฉ์‹์ด ์—†์„๊นŒ?
26+
* Map ์˜ ์žฅ์ ์€ get ํ•  ๋•Œ O(1) ์ธ๊ฑด๋ฐ, sort ๋ฅผ ํ•˜๋ฉด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•จ.
27+
*/
28+
29+
// 2๋ฒˆ์งธ ์‹œ๋„
30+
function topKFrequent(nums: number[], k: number): number[] {
31+
const answer = [];
32+
33+
// 1. ์นด์šดํŠธ๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” ๊ธฐ์ค€ ๋ฐฐ์—ด ์ƒ์„ฑ
34+
const bucket = Array.from({length: nums.length + 1}, () => []);
35+
36+
// 2. ๊ฐ ์š”์†Œ์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜์—ฌ ๋งต์œผ๋กœ ๋งŒ๋“ ๋‹ค.
37+
const countMap = new Map();
38+
for (let i = 0; i < nums.length; i++) {
39+
const cur = nums[i];
40+
countMap.set(cur, (countMap.get(cur) || 0) + 1);
41+
}
42+
43+
// 3. ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๊ธฐ์ค€ ๋ฐฐ์—ด๋กœ ์˜ฎ๊ธด๋‹ค
44+
for (const [num, count] of countMap) {
45+
bucket[count].push(num);
46+
}
47+
48+
// 4. ๋ฒ„ํ‚ท์„ ๋’ค์—์„œ ์ˆœํšŒํ•˜๋ฉด์„œ answer ๋ฐฐ์—ด์— push
49+
for (let i = bucket.length - 1; i >= 0; i--) {
50+
// ๊ฐ’์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ํ•ด๋‹น ์ธ๋ฑ์Šค ์ˆœ์„œ๋งŒํผ ์นด์šดํŒ…๋œ ์ˆซ์ž ๋ฐธ๋ฅ˜๋ฅผ ์˜๋ฏธ
51+
if (bucket[i].length > 0) {
52+
answer.push(...bucket[i]);
53+
54+
if (answer.length === k) {
55+
return answer;
56+
}
57+
}
58+
}
59+
60+
return answer;
61+
}

0 commit comments

Comments
ย (0)