1
+ //1.dfs๋ก ํ๊ธฐ : ์๊ฐ์ด๊ณผ ๋จ
2
+
3
+
4
+ /**
5
+ * @param {number[] } nums
6
+ * @return {number[][] }
7
+ */
8
+ var threeSum = function ( nums ) {
9
+ /*
10
+ arr: ํ์ฌ ๊ณ ์ ๋ฐฐ์ด์ ๋ปํจ. dfs๊ฐ ๋๋๋ง๋ค ๋ณ๊ฒฝ๋จ.
11
+ start: ๋๋ index. arr์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๊ฒ์ for๋ฌธ์์์ ๋ณ๊ฒฝ๋ ์์ .
12
+ dep: dep์ ํ์ฌ dfs์ dep+1์ ํด์ฃผ๋ฉด ๋จ.
13
+ */
14
+ const numsLength = nums . length
15
+ if ( numsLength == 3 && nums . reduce ( ( a , b ) => a + b , 0 ) == 0 ) return [ nums ]
16
+
17
+ const ret = [ ]
18
+ const seen = new Set ( ) ;
19
+ nums . sort ( ( a , b ) => a - b ) ;
20
+ function dfs ( arr , start , dep ) {
21
+ if ( dep == 3 ) {
22
+ if ( arr . length !== 3 ) return
23
+ const arrTotal = arr . reduce ( ( a , b ) => a + b , 0 ) ;
24
+ if ( arrTotal == 0 ) {
25
+ const string = [ ...arr ] . sort ( ( a , b ) => a - b ) . join ( ',' )
26
+ if ( ! seen . has ( string ) ) {
27
+ seen . add ( string )
28
+ ret . push ( arr )
29
+ }
30
+ }
31
+ return
32
+ }
33
+ //๋ง์ฝ start๊ฐ 0์ด ๋๋ฉด, i๋ฅผ ๊ฐ์์์ผ์ผํ๊ณ , ์๋ก์ด ๋ฐฐ์ด์ ์ถ๊ฐํด์ผํ๋ค. ๊ธฐ์กด์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ค.
34
+
35
+ //๋์ ์ ์ฆ๊ฐ์ํค๋ฉด์ ์งํํด์ผํจ. ํ์ฌ ๊ณ ์ arr์ ๋์ ๊ทธ ์์ idx๋ถํฐ ์งํํด์ 0๊น์ง ๊ฐ์์ํค๋ฉด์ dfs๋ฅผ ๋๋ฆฌ๋ฉด ๋๋ค.
36
+ //idx๊ฐ i-1๋ถํฐ์ด๋ฏ๋ก, i๋ ์ต์ 1์ด์ด์ผ ๊ฐ๋ฅํ๋ค.
37
+ for ( let idx = start ; idx < numsLength ; idx ++ ) {
38
+ // currArr.push([...arr,nums[idx]])
39
+ //ํ์ฌ i์ ๋ํ ํ์ฌ currArr๋ฅผ ๋ง๋ค์ด์ค๋ค.
40
+ //๋ง๋ค์ด์ค ๊ฐ Arr์ ๋ํด์, ๋ค์ dfs๋ก ๋ค์ด๊ฐ์, ๊ฐ ๋ฐฐ์ด์ ๋ด๋ถ์ ํฉ์ด 0์ธ์ง ํ์ธํ๊ณ ,
41
+ //ํ์ฌ ๋ฐฐ์ด์ ๋ํ set์ ๋ํด์ ์ค๋ณต์ด ๋๋ ๊ฒ์ ์๋์ง ํ์ธํ๋ฉด์ ๋ฃ์ด์ค๋ค.
42
+ dfs ( [ ...arr , nums [ idx ] ] , idx + 1 , dep + 1 )
43
+ } }
44
+ dfs ( [ ] , 0 , 0 )
45
+ //๋ง์ง๋ง์ set์ผ๋ก triples์ ์ค๋ณต์ ์ ๊ฑฐํด์ค์ผํ๋ค.
46
+
47
+ return ret
48
+ } ;
49
+
50
+ /*
51
+ ์๊ฐ๋ณต์ก๋:
52
+ nums.sort((a, b) => a - b): ๋ฐฐ์ด ์ ๋ ฌ์ O(NlogN)
53
+
54
+ N๊ฐ ์ซ์ ์ค 3๊ฐ ์ ํํ๋ ์กฐํฉ ์ N(Nโ1)(Nโ2)/6
55
+ ์ ํํ ์ ์๋ ์์ง๋ง,
56
+
57
+ N^3 ์ด์์ผ๋ก ๋ณด์.
58
+
59
+ ๊ณต๊ฐ๋ณต์ก๋ : O(N^3) => seen ๋๋ฌธ.
60
+
61
+ */
62
+
63
+ //2. ํฌํฌ์ธํฐ๋ก ํ๊ธฐ
0 commit comments