Skip to content

Commit 05a4fea

Browse files
committed
Group Anagrams
1 parent 3ae9135 commit 05a4fea

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

โ€Žbest-time-to-buy-and-sell-stock/lledellebell.jsโ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/**
2+
*
3+
* @problem
24
* ์ฃผ์–ด์ง„ ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ฐฐ์—ด์—์„œ ํ•œ ๋ฒˆ์˜ ๋งค์ˆ˜์™€ ํ•œ ๋ฒˆ์˜ ๋งค๋„๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
35
* ๋งค์ˆ˜๋Š” ๋งค๋„๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ๋จผ์ € ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
46
*
@@ -32,3 +34,6 @@ function maxProfit(prices) {
3234

3335
return max_profit; // ์ตœ๋Œ€ ์ด์ต ๋ฐ˜ํ™˜
3436
}
37+
38+
console.log(maxProfit([7, 1, 5, 3, 6, 4])); // 5
39+
console.log(maxProfit([7, 6, 4, 3, 1])); // 0
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
*
3+
* @problem
4+
* ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์• ๋„ˆ๊ทธ๋žจ๋ผ๋ฆฌ ๊ทธ๋ฃนํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
5+
*
6+
* (์ฐธ๊ณ )
7+
* ์• ๋„ˆ๊ทธ๋žจ(Anagram)์ด๋ž€ ๋‹จ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ๋‹ค๋ฅธ ๋‹จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
8+
* ์˜ˆ๋ฅผ ๋“ค์–ด, "eat", "tea", "ate"๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์• ๋„ˆ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
9+
*
10+
* @param {string[]} strs - ์ž…๋ ฅ ๋ฌธ์ž์—ด ๋ฐฐ์—ด
11+
* @returns {string[][]} ์• ๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ธ 2์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด
12+
*
13+
* @example
14+
* groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]); // [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
15+
* groupAnagrams([""]); // [[""]]
16+
* groupAnagrams(["a"]); // [["a"]]
17+
*
18+
* @description
19+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N * K log K)
20+
* ใ„ด N: ์ž…๋ ฅ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์˜ ๊ธธ์ด
21+
* ใ„ด K: ๊ฐ ๋ฌธ์ž์—ด์˜ ํ‰๊ท  ๊ธธ์ด
22+
* ๊ฐ ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ O(K log K)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ, ์ด๋ฅผ N๋ฒˆ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
23+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N * K)
24+
* ํ•ด์‹œ๋งต์— ์ €์žฅ๋˜๋Š” ํ‚ค์™€ ๊ฐ’์˜ ์ด ๊ธธ์ด์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.
25+
*/
26+
function groupAnagrams(strs: string[]): string[][] {
27+
// ์• ๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน์„ ์ €์žฅํ•  ํ•ด์‹œ๋งต
28+
const anagrams: Record<string, string[]> = {};
29+
30+
// ์ž…๋ ฅ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ˆœํšŒ
31+
for (const str of strs) {
32+
// ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜์—ฌ ์• ๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน์˜ ํ‚ค ์ƒ์„ฑ
33+
const key = str.split('').sort().join('');
34+
35+
// ํ‚ค๊ฐ€ ํ•ด์‹œ๋งต์— ์—†์œผ๋ฉด ์ดˆ๊ธฐํ™”
36+
if (!anagrams[key]) {
37+
anagrams[key] = [];
38+
}
39+
40+
// ํ•ด๋‹น ํ‚ค์— ๋ฌธ์ž์—ด ์ถ”๊ฐ€
41+
anagrams[key].push(str);
42+
}
43+
44+
// ํ•ด์‹œ๋งต์˜ ๊ฐ’๋“ค๋งŒ ๋ฐ˜ํ™˜ (์• ๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน)
45+
return Object.values(anagrams);
46+
}
47+
48+
console.log(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])); // [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
49+
console.log(groupAnagrams([""])); // [[""]]
50+
console.log(groupAnagrams(["a"])); // [["a"]]

0 commit comments

Comments
ย (0)