Skip to content

Commit 1084057

Browse files
committed
solution 3sum (#241)
#241
1 parent b2fe6b4 commit 1084057

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

β€Ž3sum/jiji-hoon96.tsβ€Ž

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*
5+
* 풀이 1
6+
*
7+
* μ΄λ ‡κ²Œ ν‘Έλ‹ˆκΉŒ μ‹œκ°„λ³΅μž‘λ„ O(n^3) / κ³΅κ°„λ³΅μž‘λ„ O(n) λΌμ„œ λ³΅μž‘ν•œ μ˜ˆμ‹œμ—λŠ” time limit 이 λ°œμƒν•¨
8+
* κ°œμ„ ν•΄λ³΄μž..
9+
*
10+
* function threeSum(nums: number[]): number[][] {
11+
* nums.sort((a, b) => a - b);
12+
* let result = []
13+
* for (let i= 0; i<nums.length; i++){
14+
* for(let j= i+1 ; j <nums.length; j++){
15+
* for (let k = j+1; k<nums.length; k++){
16+
* if(nums[i]+nums[j]+nums[k]===0){
17+
* result.push([nums[i], nums[j], nums[k]]);
18+
* }
19+
* }
20+
* }
21+
* }
22+
*
23+
* return Array.from(
24+
* new Set(result.map(item => JSON.stringify(item))),
25+
* str => JSON.parse(str)
26+
* );
27+
* }
28+
*
29+
* 풀이 2
30+
*
31+
* νˆ¬ν¬μΈν„°λ₯Ό ν™œμš©ν•΄λ³΄μž.
32+
* μ•„λž˜μ²˜λŸΌ 문제λ₯Ό ν’€κ²Œλ˜λ©΄ μ‹œκ°„λ³΅μž‘λ„ O(n^2) / κ³΅κ°„λ³΅μž‘λ„ O(1) 이닀.
33+
* μ‹œκ³΅κ°„ λ³΅μž‘λ„κ°€ μ€„κΈ΄ν•˜μ§€λ§Œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰κ³Ό 큰 숫자λ₯Ό λ‹€λ£° λ•Œ μ„±λŠ₯이 맀우 μ’‹λ‹€!
34+
*/
35+
36+
37+
function threeSum(nums: number[]): number[][] {
38+
let result : number[][] = []
39+
nums.sort((a, b) => a - b);
40+
const n = nums.length;
41+
42+
for(let first = 0; first<n-2; first++){
43+
// μ²«λ²ˆμ§Έκ°€ μ–‘μˆ˜λ©΄ 0이 될 수 μ—†μŒ
44+
if(nums[first] > 0) break;
45+
46+
//μ€‘λ³΅λœ μˆ˜λŠ” κ±΄λ„ˆλœ€
47+
if(first > 0 && nums[first]===nums[first-1]) continue;
48+
49+
let left = first + 1;
50+
let right = n-1;
51+
52+
while(left < right){
53+
const sum = nums[first] +nums[left] + nums[right];
54+
55+
if(sum < 0){
56+
left ++
57+
}else if(sum > 0){
58+
right --;
59+
}else{
60+
result.push([nums[first],nums[left],nums[right]]);
61+
// left, left+1 이 같을 λ•Œ μ€‘λ³΅λœ μˆ˜λŠ” κ±΄λ„ˆλœ€
62+
while(left < right && nums[left] === nums[left+1]) left++;
63+
// right, right+1 이 같을 λ•Œ μ€‘λ³΅λœ μˆ˜λŠ” κ±΄λ„ˆλœ€
64+
while(left < right && nums[right] === nums[right-1]) right--;
65+
left++;
66+
right--;
67+
}
68+
}
69+
}
70+
return result;
71+
}

0 commit comments

Comments
Β (0)