Skip to content

Commit e219a99

Browse files
wip: 3sum ํ’€์ด
1 parent a49e7c9 commit e219a99

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//1.dfs๋กœ ํ’€๊ธฐ : ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚จ
2+
3+
4+
/**
5+
* @param {number[]} nums
6+
* @return {number[][]}
7+
*/
8+
var threeSum = function(nums) {
9+
/*
10+
arr: ํ˜„์žฌ ๊ณ ์ • ๋ฐฐ์—ด์„ ๋œปํ•จ. dfs๊ฐ€ ๋Œ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋จ.
11+
start: ๋๋‚œ index. arr์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๊ฒƒ์€ for๋ฌธ์•ˆ์—์„œ ๋ณ€๊ฒฝ๋  ์˜ˆ์ •.
12+
dep: dep์€ ํ˜„์žฌ dfs์˜ dep+1์„ ํ•ด์ฃผ๋ฉด ๋จ.
13+
*/
14+
const numsLength = nums.length
15+
if(numsLength ==3 && nums.reduce((a,b)=>a+b,0) == 0) return [nums]
16+
17+
const ret = []
18+
const seen = new Set();
19+
nums.sort((a, b) => a - b);
20+
function dfs(arr,start,dep){
21+
if(dep == 3) {
22+
if(arr.length !==3) return
23+
const arrTotal = arr.reduce((a,b)=>a+b,0);
24+
if(arrTotal == 0){
25+
const string = [...arr].sort((a,b)=>a-b).join(',')
26+
if(!seen.has(string)){
27+
seen.add(string)
28+
ret.push(arr)
29+
}
30+
}
31+
return
32+
}
33+
//๋งŒ์•ฝ start๊ฐ€ 0์ด ๋˜๋ฉด, i๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์•ผํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ๊ธฐ์กด์˜ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.
34+
35+
//๋์ ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์ง„ํ–‰ํ•ด์•ผํ•จ. ํ˜„์žฌ ๊ณ ์ • arr์— ๋์  ๊ทธ ์•ž์˜ idx๋ถ€ํ„ฐ ์ง„ํ–‰ํ•ด์„œ 0๊นŒ์ง€ ๊ฐ์†Œ์‹œํ‚ค๋ฉด์„œ dfs๋ฅผ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค.
36+
//idx๊ฐ€ i-1๋ถ€ํ„ฐ์ด๋ฏ€๋กœ, i๋Š” ์ตœ์†Œ 1์ด์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค.
37+
for(let idx = start; idx<numsLength; idx++){
38+
// currArr.push([...arr,nums[idx]])
39+
//ํ˜„์žฌ i์— ๋Œ€ํ•œ ํ˜„์žฌ currArr๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
40+
//๋งŒ๋“ค์–ด์ค€ ๊ฐ Arr์— ๋Œ€ํ•ด์„œ, ๋‹ค์‹œ dfs๋กœ ๋“ค์–ด๊ฐ€์„œ, ๊ฐ ๋ฐฐ์—ด์˜ ๋‚ด๋ถ€์˜ ํ•ฉ์ด 0์ธ์ง€ ํ™•์ธํ•˜๊ณ ,
41+
//ํ˜„์žฌ ๋ฐฐ์—ด์— ๋Œ€ํ•œ set์— ๋Œ€ํ•ด์„œ ์ค‘๋ณต์ด ๋˜๋Š” ๊ฒƒ์€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๋ฉด์„œ ๋„ฃ์–ด์ค€๋‹ค.
42+
dfs([...arr,nums[idx]],idx+1,dep+1)
43+
}}
44+
dfs([],0,0)
45+
//๋งˆ์ง€๋ง‰์— set์œผ๋กœ triples์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ค˜์•ผํ•œ๋‹ค.
46+
47+
return ret
48+
};
49+
50+
/*
51+
์‹œ๊ฐ„๋ณต์žก๋„:
52+
nums.sort((a, b) => a - b): ๋ฐฐ์—ด ์ •๋ ฌ์— O(NlogN)
53+
54+
N๊ฐœ ์ˆซ์ž ์ค‘ 3๊ฐœ ์„ ํƒํ•˜๋Š” ์กฐํ•ฉ ์ˆ˜ N(Nโˆ’1)(Nโˆ’2)/6
55+
์ •ํ™•ํžˆ ์•Œ ์ˆ˜๋Š” ์—†์ง€๋งŒ,
56+
57+
N^3 ์ด์ƒ์œผ๋กœ ๋ณด์ž„.
58+
59+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N^3) => seen ๋•Œ๋ฌธ.
60+
61+
*/
62+
63+
//2. ํˆฌํฌ์ธํ„ฐ๋กœ ํ’€๊ธฐ

0 commit comments

Comments
ย (0)