1+ /**
2+ ν©μ°μ΄ 0μ΄ λλ μλ‘μ μ‘°ν©μ μ°ΎμμΌ νλ€.. μ’νκ° λ€λ₯Έ κ°μ κ°μ νμ©νλ,
3+ κ°μ μλ‘ κ΅¬μ±λ μ‘°ν©μ μ€λ³΅μ λΆννλ€.
4+
5+ κΈ°λ³Έμ μΌλ‘ 3κ°μ§ μλ₯Ό μ€λ³΅μμ΄ μ‘°ν©ν΄μ λ½μ λ€μ, μ λ ¬μ μ¬μ©νμ¬ set μΌλ‘ ꡬλΆν μ μμ§ μμκΉ?
6+
7+
8+ function threeSum(nums: number[]): number[][] {
9+ const arraySet = new Set<string>();
10+
11+ for (let i = 0; i <= nums.length - 3; i++) {
12+ for (let j = i + 1; j <= nums.length - 2; j++) {
13+ for (let k = j + 1; k <= nums.length - 1; k++) {
14+ if (nums[i] + nums[j] + nums[k] === 0) {
15+ const sorted = [nums[i], nums[j], nums[k]];
16+ sorted.sort((a, b) => a - b);
17+ const string = sorted.join("#");
18+ arraySet.add(string);
19+ }
20+ }
21+ }
22+ }
23+
24+ return Array.from(arraySet).map((el) =>
25+ el.split("#").map((el) => Number(el))
26+ );
27+ }
28+ */
29+
30+ /**
31+ μκ° μ΄κ³Όν΄λ²λ Έλ€. μ΄λ»κ² ν¨μ¨μ μΌλ‘ ν μ μμκΉ?
32+ two sum μ 보λ ν΄μν
μ΄λΈμ μ΄λ€κ³ νλ€. nums λ₯Ό ν΄μν
μ΄λΈλ‘ λ³ννκ³ ,
33+ μ΄μ€ λ°λ³΅λ¬Έμμ μ΄λ₯Ό νμ©ν΄λ³΄μ.
34+
35+ function threeSum(nums: number[]): number[][] {
36+ const arraySet = new Set<string>();
37+ const hash = new Map<number, number[]>();
38+ nums.forEach((val, idx) => {
39+ const idxes = hash.get(val);
40+ if (idxes && idxes.length) {
41+ hash.set(val, [...idxes, idx]);
42+ } else {
43+ hash.set(val, [idx]);
44+ }
45+ });
46+
47+ for (let i = 0; i < nums.length - 2; i++) {
48+ for (let j = i + 1; j < nums.length - 1; j++) {
49+ const idxes = hash.get(0 - (nums[i] + nums[j]));
50+
51+ idxes?.forEach((idx) => {
52+ if (idx != i && idx != j) {
53+ const sorted = [nums[i], nums[j], nums[idx]];
54+ sorted.sort((a, b) => a - b);
55+ const string = sorted.join("#");
56+ arraySet.add(string);
57+ }
58+ });
59+ }
60+ }
61+
62+ return Array.from(arraySet).map((el) =>
63+ el.split("#").map((el) => Number(el))
64+ );
65+ }
66+
67+ */
68+
69+ /**
70+ ... 0μΌλ‘λ§ κ°λμ°¬ λ°°μ΄μμ time limit μ΄ λ°μνλ€.
71+ νμ΄λ₯Ό λ³΄κ³ μ€λ, μ λ‘μ§μμ 0μΌλ‘ κ°λμ°¬ arraySet μ μννλ κ³³μμ κ²°κ΅ O(n^3) μ΄ λμ΄λ²λ¦°λ€λ μ μ νμΈν μ μμλ€.
72+ νμ€ν κ²μ, μ λ ¬μ μΆκ°νμ κ²½μ° μ λ‘μ§λ ν΅κ³Ό κ°λ₯ν μ λλ‘ λ§λ€μ΄λ³Ό μ μμ§ μμκΉ μΆμλ€.
73+
74+ function threeSum(nums: number[]): number[][] {
75+ nums.sort((a, b) => a - b);
76+ const arraySet = new Set<string>();
77+ const hash = new Map<number, number[]>();
78+
79+ nums.forEach((val, idx) => {
80+ const idxes = hash.get(val);
81+ if (idxes && idxes.length) {
82+ hash.set(val, [...idxes, idx]);
83+ } else {
84+ hash.set(val, [idx]);
85+ }
86+ });
87+
88+ for (let i = 0; i < nums.length - 2; i++) {
89+ for (let j = i + 1; j < nums.length - 1; j++) {
90+ const idxes = hash.get(0 - (nums[i] + nums[j])) ?? [];
91+
92+ for (let k = 0; k < idxes.length; k++) {
93+ const idx = idxes[k];
94+ if (idx != i && idx != j) {
95+ const sorted = [nums[i], nums[j], nums[idx]];
96+ sorted.sort((a, b) => a - b);
97+ const string = sorted.join("#");
98+ arraySet.add(string);
99+
100+ break;
101+ }
102+ }
103+ }
104+ }
105+
106+ return Array.from(arraySet).map((el) =>
107+ el.split("#").map((el) => Number(el))
108+ );
109+ }
110+
111+ κ·Όλ° μ΄λ»κ²λ λͺ»λ§λ¦.
112+ */
0 commit comments