Skip to content

Commit 9ce43d1

Browse files
committed
3sum solution
1 parent 1dea909 commit 9ce43d1

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

3sum/yeeZinu.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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+
};

0 commit comments

Comments
 (0)