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