File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /**
2+ ์ค์ํ ๊ฒ์ ์ง์ ์ฐพ๋ ๊ฒ์ด๋ค.
3+ ์ฆ, ์ ์๊ฐ 0์ด ๋๋ '์ญ์(inverse)'์ ์ฐพ์์ผ ํ๋ค.
4+ ์ญ์์ ๋ด์ ์ ์ฅ์๊ฐ ํ์ํ๋ฐ,
5+ ์ฐพ์์ผํ ์ญ์์ ์ฌ๋ฌ๊ฐ์ผ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฃผ๋จธ๋ ์ญํ ๋ก Set ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ค.
6+ ์ค๋ณต ์กฐ๊ฑด์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํ์ฌ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ์์ ์ค์์ ๋์ผํ ๊ฐ์ ์ ์ธํ๋ค.
7+ */
8+ /**
9+ * @param {number[] } nums
10+ * @return {number[][] }
11+ */
12+
13+ function threeSum ( nums ) {
14+ let result = [ ] ;
15+
16+ nums . sort ( ( a , b ) => a - b ) ;
17+
18+ for ( let i = 0 ; i < nums . length ; i ++ ) {
19+ if ( nums [ i ] > 0 ) break ;
20+
21+ // ์ค๋ณต ์ ๊ฑฐ โ i>0 ์ด์ํ ๋ ์๊ฐ ์ผ์นํ๋ฉด skip
22+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
23+
24+ let pocket = new Set ( ) ;
25+
26+ for ( let g = i + 1 ; g < nums . length ; g ++ ) {
27+ let find_num = - ( nums [ i ] + nums [ g ] ) ;
28+
29+ if ( pocket . has ( find_num ) ) {
30+ result . push ( [ nums [ i ] , find_num , nums [ g ] ] ) ;
31+
32+ // ์ค๋ณต ์ ๊ฑฐ โ ์ ๋ ฌ๋ ์ํ์์ ๊ฐ์ ์๊ฐ ๋์ค๋ฉด shift
33+ while ( g + 1 < nums . length && nums [ g ] === nums [ g + 1 ] ) {
34+ g ++ ;
35+ }
36+ }
37+ pocket . add ( nums [ g ] ) ;
38+ }
39+ }
40+ return result ;
41+ }
You canโt perform that action at this time.
0 commit comments