File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number[][] }
4
+ *
5
+ * 문제: 세 수를 더해서 0을 만들어야함.
6
+ *
7
+ * 주의사항: 인덱스 상관없어 세 수의 조합이 같으면 안됨.
8
+ * 핵심: 배열을 오름차순으로 정렬해서
9
+ * 양 끝에 각 인덱스넣고 사이에 있는인덱스로 계속 더하면서
10
+ * 좌우 인덱스를 0에 가깝게 +- 하면된다~
11
+ *
12
+ */
13
+ var threeSum = function ( nums ) {
14
+ // 결과를 저장할 배열
15
+ let result = [ ] ;
16
+ // 주어진 수를 오름차순으로 정렬
17
+ nums . sort ( ( a , b ) => a - b ) ;
18
+
19
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
20
+ // nums[i] > 0보다 크다면? 반복 끝
21
+ if ( nums [ i ] > 0 ) {
22
+ break ;
23
+ }
24
+
25
+ let j = i + 1 ; // 중간에서 바뀔 인덱스
26
+ let k = nums . length - 1 ; // 맨 마지막에서 부터 움직일 인덱스
27
+
28
+ while ( j < k ) {
29
+ let sum = nums [ i ] + nums [ j ] + nums [ k ] ;
30
+
31
+ // 총합이 양수라면 k인덱스 한칸뒤로 ㄱ
32
+ if ( sum > 0 ) {
33
+ k -- ;
34
+ }
35
+ // 음수라면 j진행 ㄱ
36
+ else if ( sum < 0 ) {
37
+ j ++ ;
38
+ }
39
+ // 0이면 result배열에 추가, j진행
40
+ else {
41
+ result . push ( [ nums [ i ] , nums [ j ] , nums [ k ] ] ) ;
42
+ j ++ ;
43
+
44
+ // j가 이전값과 같다면 무시하고 진행하기
45
+ while ( nums [ j ] === nums [ j - 1 ] && j < k ) {
46
+ j ++ ;
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ return result ;
53
+
54
+ } ;
You can’t perform that action at this time.
0 commit comments