File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change
1
+ function threeSum ( nums : number [ ] ) : number [ ] [ ] {
2
+ if ( nums . length < 3 ) return [ ] ;
3
+ const result : number [ ] [ ] = [ ] ;
4
+ const checked = new Set < string > ( ) ;
5
+ const numMap = new Map < number , number > ( ) ;
6
+
7
+ // 중복 결과 방지
8
+ nums . sort ( ( a , b ) => a - b ) ;
9
+ // Map에 모든 값과 인덱스 저장
10
+ nums . forEach ( ( num , index ) => numMap . set ( num , index ) ) ;
11
+
12
+ for ( let i = 0 ; i < nums . length - 2 ; i ++ ) {
13
+ if ( nums [ i ] > 0 ) break ; // 양수면 존재 X
14
+ // 중복된 첫 번째 수 건너뛰기
15
+ if ( i > 0 && nums [ i ] === nums [ i - 1 ] ) continue ;
16
+
17
+ for ( let j = i + 1 ; j < nums . length - 1 ; j ++ ) {
18
+ // 중복된 두 번째 수 건너뛰기
19
+ if ( j > i + 1 && nums [ j ] === nums [ j - 1 ] ) continue ;
20
+ // 세 번째 수 계산
21
+ const target = - ( nums [ i ] + nums [ j ] ) ;
22
+
23
+ // Map을 사용하여 세 번째 수 검색
24
+ if ( numMap . has ( target ) ) {
25
+ const k = numMap . get ( target ) ! ;
26
+ if ( k > j ) {
27
+ // k가 j보다 커야 중복 방지
28
+ const triplet = [ nums [ i ] , nums [ j ] , nums [ k ] ] ;
29
+ const key = triplet . join ( "," ) ;
30
+
31
+ // Set을 사용하여 중복 결과 방지
32
+ if ( ! checked . has ( key ) ) {
33
+ checked . add ( key ) ;
34
+ result . push ( triplet ) ;
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ return result ;
42
+ }
You can’t perform that action at this time.
0 commit comments