Skip to content

Commit c9e4ed2

Browse files
committed
group-anagrams
1 parent 2ce8191 commit c9e4ed2

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* ์ฒซ๋ฒˆ์จฐ ํ’€์ด: ๊ฐ ๋‹จ์–ด๋งˆ๋‹ค ์ด์ „์— ์ฒ˜๋ฆฌํ•œ ๋‹จ์–ด๋“ค๊ณผ ์ผ์ผ์ด ๋น„๊ตํ•˜์—ฌ ์• ๋„ˆ๊ทธ๋žจ ์—ฌ๋ถ€ ํ™•์ธ
3+
* ์ฒซ๋ฒˆ์งธ ํ’€์ด๋กœ๋„ ํ†ต๊ณผ๋Š” ํ•จ
4+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(nยฒ*k), ๊ณต๊ฐ„๋ณต์žก๋„: O(n*k) (n: ๋‹จ์–ด ์ˆ˜, k: ํ‰๊ท  ๋‹จ์–ด ๊ธธ์ด)
5+
*/
6+
/*var groupAnagrams = function (strs) {
7+
if (strs.length === 1) return [strs];
8+
9+
const answer = [[strs[0]]];
10+
11+
for (let i = 1; i < strs.length; i++) {
12+
let flag = false;
13+
for (let k = 0; k < answer.length; k++) {
14+
const word = answer[k][0];
15+
if (isAnagram(word, strs[i])) {
16+
answer[k].push(strs[i]);
17+
flag = true;
18+
}
19+
}
20+
if (!flag) answer.push([strs[i]]);
21+
}
22+
23+
return answer;
24+
};
25+
26+
var isAnagram = function (s1, s2) {
27+
if (s1.length !== s2.length) return false;
28+
29+
// ์˜์–ด ์†Œ๋ฌธ์ž ๊ฐœ์ˆ˜ ์ด 26๊ฐœ
30+
const code = new Array(26).fill(0);
31+
32+
for (let i = 0; i < s1.length; i++) {
33+
code[s1[i].charCodeAt() - 97]++;
34+
code[s2[i].charCodeAt() - 97]--;
35+
}
36+
return code.every((x) => x === 0);
37+
};
38+
*/
39+
///////////////////////////////////////////////////////////////
40+
41+
/*
42+
* ๋‘๋ฒˆ์จฐ ํ’€์ด: ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด์‹œ๋งต์— ๊ทธ๋ฃนํ™”
43+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n*k*log(k)), ๊ณต๊ฐ„๋ณต์žก๋„: O(n*k) (n: ๋‹จ์–ด ์ˆ˜, k: ํ‰๊ท  ๋‹จ์–ด ๊ธธ์ด)
44+
*/
45+
/**
46+
* @param {string[]} strs
47+
* @return {string[][]}
48+
*/
49+
var groupAnagrams = function (strs) {
50+
if (strs.length === 1) return [strs];
51+
52+
// ํ•ด์‹œ๋งต์œผ๋กœ ์• ๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน ๊ด€๋ฆฌ
53+
const answer = {};
54+
55+
for (let i = 0; i < strs.length; i++) {
56+
// ์• ๋„ˆ๊ทธ๋žจ์€ ์ •๋ ฌํ•˜๋ฉด ๋™์ผํ•œ ๋ฌธ์ž์—ด์ด ๋จ
57+
// k๋Š” ์ตœ๋Œ€ 100์œผ๋กœ ์ œํ•œ๋˜์–ด ์žˆ์–ด ์ •๋ ฌ(O(k log k))์ด ํšจ์œจ์ ์ด๋ฏ€๋กœ
58+
// ์ฒซ ๋ฒˆ์งธ ํ’€์ด์˜ ์นด์šดํŒ… ๋ฐฉ์‹ ๋Œ€์‹  ๊ฐ„๋‹จํžˆ ์ •๋ ฌ๋กœ ํŒ๋ณ„ ๊ฐ€๋Šฅ
59+
const sort = [...strs[i]].sort().join("");
60+
61+
// ์ด๋ฏธ ๊ฐ™์€ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน์— ์ถ”๊ฐ€
62+
if (sort in answer) {
63+
answer[sort].push(strs[i]);
64+
} else {
65+
// ์ƒˆ๋กœ์šด ๊ทธ๋ฃน ์ƒ์„ฑ
66+
answer[sort] = [strs[i]];
67+
}
68+
}
69+
70+
return Object.values(answer);
71+
};

0 commit comments

Comments
ย (0)