Skip to content

Commit 7882a55

Browse files
committed
feat(soobing): week2 > 3sum
1 parent 68e598d commit 7882a55

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

3sum/soobing2.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* 문제 유형
3+
* - Array (정렬 + 투포인터)
4+
*
5+
* 문제 설명
6+
* - 3개의 수를 더해서 0이 되는 경우를 찾아서 배열로 반환하기
7+
*
8+
* 아이디어
9+
* 1) 정렬 후 투포인터 사용, 중복 제거
10+
11+
*/
12+
function threeSum(nums: number[]): number[][] {
13+
const result: number[][] = [];
14+
15+
// sorting
16+
nums.sort((a, b) => a - b);
17+
18+
for (let i = 0; i < nums.length - 2; i++) {
19+
// 중복 제거
20+
if (i > 0 && nums[i] === nums[i - 1]) continue;
21+
22+
let left = i + 1;
23+
let right = nums.length - 1;
24+
while (left < right) {
25+
const sum = nums[i] + nums[left] + nums[right];
26+
if (sum === 0) {
27+
result.push([nums[i], nums[left], nums[right]]);
28+
left++;
29+
right--;
30+
31+
// 중복 제거
32+
while (left < right && nums[left] === nums[left - 1]) left++;
33+
while (left < right && nums[right] === nums[right + 1]) right--;
34+
} else if (sum < 0) {
35+
left++;
36+
} else {
37+
right--;
38+
}
39+
}
40+
}
41+
return result;
42+
}

0 commit comments

Comments
 (0)