Skip to content

Commit 519faa0

Browse files
Merge pull request #1730 from grapefruitgreentealoe/week2
2 parents 34084b4 + 8a12f00 commit 519faa0

File tree

5 files changed

+290
-0
lines changed

5 files changed

+290
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
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+
21+
function dfs(arr,start,dep){
22+
if(dep == 3) {
23+
if(arr.length !==3) return
24+
const arrTotal = arr.reduce((a,b)=>a+b,0);
25+
if(arrTotal == 0){
26+
const string = [...arr].sort((a,b)=>a-b).join(',')
27+
if(!seen.has(string)){
28+
seen.add(string)
29+
ret.push(arr)
30+
}
31+
}
32+
return
33+
}
34+
//๋งŒ์•ฝ start๊ฐ€ 0์ด ๋˜๋ฉด, i๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์•ผํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ๊ธฐ์กด์˜ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.
35+
36+
//๋์ ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์ง„ํ–‰ํ•ด์•ผํ•จ. ํ˜„์žฌ ๊ณ ์ • arr์— ๋์  ๊ทธ ์•ž์˜ idx๋ถ€ํ„ฐ ์ง„ํ–‰ํ•ด์„œ 0๊นŒ์ง€ ๊ฐ์†Œ์‹œํ‚ค๋ฉด์„œ dfs๋ฅผ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค.
37+
//idx๊ฐ€ i-1๋ถ€ํ„ฐ์ด๋ฏ€๋กœ, i๋Š” ์ตœ์†Œ 1์ด์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค.
38+
for(let idx = start; idx<numsLength; idx++){
39+
// currArr.push([...arr,nums[idx]])
40+
//ํ˜„์žฌ i์— ๋Œ€ํ•œ ํ˜„์žฌ currArr๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
41+
//๋งŒ๋“ค์–ด์ค€ ๊ฐ Arr์— ๋Œ€ํ•ด์„œ, ๋‹ค์‹œ dfs๋กœ ๋“ค์–ด๊ฐ€์„œ, ๊ฐ ๋ฐฐ์—ด์˜ ๋‚ด๋ถ€์˜ ํ•ฉ์ด 0์ธ์ง€ ํ™•์ธํ•˜๊ณ ,
42+
//ํ˜„์žฌ ๋ฐฐ์—ด์— ๋Œ€ํ•œ set์— ๋Œ€ํ•ด์„œ ์ค‘๋ณต์ด ๋˜๋Š” ๊ฒƒ์€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๋ฉด์„œ ๋„ฃ์–ด์ค€๋‹ค.
43+
dfs([...arr,nums[idx]],idx+1,dep+1)
44+
}}
45+
dfs([],0,0)
46+
//๋งˆ์ง€๋ง‰์— set์œผ๋กœ triples์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ค˜์•ผํ•œ๋‹ค.
47+
48+
return ret
49+
};
50+
51+
/*
52+
์‹œ๊ฐ„๋ณต์žก๋„:
53+
nums.sort((a, b) => a - b): ๋ฐฐ์—ด ์ •๋ ฌ์— O(NlogN)
54+
55+
N๊ฐœ ์ˆซ์ž ์ค‘ 3๊ฐœ ์„ ํƒํ•˜๋Š” ์กฐํ•ฉ ์ˆ˜ N(Nโˆ’1)(Nโˆ’2)/6
56+
์ •ํ™•ํžˆ ์•Œ ์ˆ˜๋Š” ์—†์ง€๋งŒ,
57+
58+
N^3 ์ด์ƒ์œผ๋กœ ๋ณด์ž„.
59+
60+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N^3) => seen ๋•Œ๋ฌธ.
61+
62+
*/
63+
64+
//2. ํˆฌํฌ์ธํ„ฐ๋กœ ํ’€๊ธฐ
65+
66+
/*
67+
์šฐ์„  ๋‚ด๊ฐ€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ‹€๋ ธ๋‹ค. ์ˆซ์ž์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ๊ฐ™์€ ์ˆซ์ž์˜ ์กฐํ•ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์•ˆ๋œ๋‹ค.
68+
๊ฐ’์ด ์›ํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ์˜ฎ๊ธฐ๊ณ , ํฌ๋ฉด ์™ผ์ชฝ ๊ฐ’์„ ์˜ฎ๊ธฐ๋Š” ํˆฌํฌ์ธํ„ฐ ์ „๋žต์„ ์ทจํ•ด๋ณด์•˜๋‹ค.
69+
70+
*/
71+
72+
/**
73+
* @param {number[]} nums
74+
* @return {number[][]}
75+
*/
76+
var threeSum = function(nums) {
77+
const triplets = []
78+
nums.sort((a,b)=>a-b)
79+
for(let i =0;i<nums.length -2 ;i++){
80+
if (i > 0 && nums[i] === nums[i - 1]) continue;
81+
let low = i+1
82+
,high = nums.length -1
83+
84+
while(low < high){
85+
const three_sum = nums[i] + nums[low] + nums[high]
86+
if(three_sum<0){
87+
low +=1
88+
}
89+
else if(three_sum >0){
90+
high -=1
91+
}
92+
else{
93+
triplets.push([nums[i],nums[low],nums[high]])
94+
while (low < high && nums[low] === nums[low + 1]) low++;
95+
while (low < high && nums[high] === nums[high - 1]) high--;
96+
low = low+1
97+
high = high -1
98+
}
99+
}
100+
}
101+
return triplets
102+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//ํŠน์ • ์ง€์ ๊นŒ์ง€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฐœ์ˆ˜์˜ ๊ธธ์ด ์กด์žฌํ• ๊นŒ
2+
//๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ 1 ํ˜น์€ 2์นธ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
3+
4+
/* 1. dp๋กœ ํ’€๊ธฐ.
5+
์ ํ™”์‹์€ ์ด๋ ‡๋‹ค.
6+
dp[n] = d[n-1] + d[n-2]
7+
*/
8+
9+
var climbStairs = function(n) {
10+
if (n === 1) return 1;
11+
if (n === 2) return 2;
12+
13+
const dp = Array(n + 1).fill(0);
14+
dp[1] = 1;
15+
dp[2] = 2;
16+
17+
for (let i = 3; i <= n; i++) {
18+
dp[i] = dp[i - 1] + dp[i - 2];
19+
}
20+
21+
return dp[n];
22+
};
23+
24+
//์‹œ๊ฐ„๋ณต์žก๋„: O(n)
25+
//๊ณต๊ฐ„๋ณต์žก๋„: O(n)
26+
27+
//2. ๋ฉ”๋ชจ๋ฆฌ ์•„๋ผ๊ธฐ
28+
//dp๋ฐฐ์—ด ์—†์ด ๋ณ€์ˆ˜๋กœ๋งŒ ์ž‘์„ฑํ•˜๊ธฐ
29+
var climbStairs = function(n) {
30+
if (n === 1) return 1;
31+
let a = 1, b = 2;
32+
for (let i = 3; i <= n; i++) {
33+
let temp = a + b;
34+
a = b;
35+
b = temp;
36+
}
37+
return b;
38+
};
39+
40+
41+
//์‹œ๊ฐ„๋ณต์žก๋„: O(n)
42+
//๊ณต๊ฐ„๋ณต์žก๋„: O(1)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
var productExceptSelf = function(nums) {
2+
const n = nums.length;
3+
const left = new Array(n).fill(1);
4+
const right = new Array(n).fill(1);
5+
const answer = new Array(n).fill(1);
6+
7+
// ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ
8+
for (let i = n - 2; i >= 0; i--) {
9+
right[i] = right[i + 1] * nums[i + 1];
10+
}
11+
12+
// ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ
13+
for (let i = 1; i < n; i++) {
14+
left[i] = left[i - 1] * nums[i - 1];
15+
}
16+
17+
// ์ตœ์ข… ๊ณฑ์…ˆ
18+
for (let i = 0; i < n; i++) {
19+
answer[i] = left[i] * right[i];
20+
}
21+
22+
return answer;
23+
};
24+
};
25+
//์‹œ๊ฐ„๋ณต์žก๋„ O(n)
26+
//๊ณต๊ฐ„๋ณต์žก๋„ O(n)
27+
// ์–ด๋ ค์› ๋˜ ์ : ํ•œ๋ฒˆ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ง€๋งŒ, ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๋Š” ์ ์—์„œ ์–ด๋ ค์›€์„ ๊ฒช์—‡๋‹ค.
28+
29+
30+
//์—ฌ๊ธฐ์„œ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. ( ๋ฆฌํ„ด ๋ฐฐ์—ด ์ œ์™ธ)
31+
/**
32+
* ๋ฌธ์ œ ๋‚ด์—์„œ Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)
33+
*/
34+
var productExceptSelf = function(nums) {
35+
const n = nums.length;
36+
const answer = new Array(n).fill(1);
37+
38+
// ์™ผ์ชฝ ๊ณฑ
39+
for (let i = 1; i < n; i++) {
40+
answer[i] = answer[i - 1] * nums[i - 1];
41+
}
42+
43+
// ์˜ค๋ฅธ์ชฝ ๊ณฑ ๋ˆ„์ ํ•˜๋ฉด์„œ answer์— ๊ณฑํ•ด์คŒ
44+
let right = 1;
45+
for (let i = n - 1; i >= 0; i--) {
46+
answer[i] *= right;
47+
right *= nums[i];
48+
}
49+
50+
return answer;
51+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
var isAnagram = function(s, t) {
3+
if (s.length !== t.length) return false;
4+
5+
const map = new Map();
6+
7+
for (let ch of s) {
8+
map.set(ch, (map.get(ch) || 0) + 1);
9+
}
10+
11+
for (let ch of t) {
12+
if (!map.has(ch)) return false;
13+
map.set(ch, map.get(ch) - 1);
14+
if (map.get(ch) < 0) return false;
15+
}
16+
17+
return true;
18+
};
19+
20+
//์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
21+
//๊ณต๊ฐ„๋ณต์žก๋„ : O(1) (์˜๋ฌธ์ž๋‹ˆ๊นŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๊ฐ€ ํ•œ์ •๋˜์–ด์žˆ์œผ๋ฏ€๋กœ. )
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
์œ ํšจํ•œ BST๋Š” ์ด๋ ‡๊ฒŒ ์ •์˜๊ฐ€ ๋œ๋‹ค.
3+
1. ๋…ธ๋“œ์˜ ์ขŒ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ์žˆ๋‹ค.
4+
2. ๋…ธ๋“œ์˜ ์šฐ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฐ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ์žˆ๋‹ค.
5+
3. ์ขŒ ์šฐ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ๋ชจ๋‘ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค.
6+
7+
ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋Š” ์žฌ๊ท€๋กœ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
8+
๋˜ํ•œ BST ์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ, ํ•˜์œ„๊ฐ’, ์ƒํ•œ๊ฐ’์˜ ๊ฐœ๋…์ด ๋“ค์–ด๊ฐ„๋‹ค.
9+
๋งŒ์•ฝ ์ขŒ์ธก์œผ๋กœ ์ˆœํšŒํ•˜๊ฒŒ ๋ ๋•Œ๋Š”
10+
ํ•˜์œ„๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ํ•˜ํ•œ๊ฐ’.
11+
์ƒํ•œ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋œ๋‹ค.
12+
13+
์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋‚ด๋ ค๊ฐˆ ๋•Œ๋Š”,
14+
ํ•˜์œ„๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’,
15+
์ƒํ•œ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ์ƒํ•œ๊ฐ’์ด ๋œ๋‹ค.
16+
*/
17+
18+
/**
19+
* Definition for a binary tree node.
20+
* function TreeNode(val, left, right) {
21+
* this.val = (val===undefined ? 0 : val)
22+
* this.left = (left===undefined ? null : left)
23+
* this.right = (right===undefined ? null : right)
24+
* }
25+
*/
26+
/**
27+
* @param {TreeNode} root
28+
* @return {boolean}
29+
*/
30+
var isValidBST = function(root) {
31+
function dfs(node,low,high){
32+
if(!node) return true; // leaf
33+
if(
34+
(low !==null && node.val <= low)||
35+
(high !== null && node.val >= high)){
36+
return false
37+
}
38+
return dfs(node.left,left,node.val) && dfs(node.right,node.val,high)
39+
40+
}
41+
dfs(root,null,null)
42+
};
43+
44+
45+
46+
/*
47+
2. ๋‘๋ฒˆ์งธ๋กœ๋Š” ์ค‘์œ„์ˆœํšŒ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
48+
์ค‘์œ„์ˆœํšŒ : ์™ผ์ชฝ โ†’ ํ˜„์žฌ ๋…ธ๋“œ โ†’ ์˜ค๋ฅธ์ชฝ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹
49+
50+
์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.
51+
์ขŒ์ธกํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ์ˆœํšŒํ•˜๊ณ , ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์šฐ์ธก ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
52+
53+
๋”ฐ๋ผ์„œ, ์ค‘์œ„์ˆœํšŒ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๊ฒƒ์€ ์œ ํšจํ•œ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.
54+
*/
55+
var isValidBST = function(root) {
56+
let prev = null;
57+
58+
function inorder(node) {
59+
if (!node) return true; //leaf
60+
61+
if (!inorder(node.left)) return false;
62+
63+
//์ขŒ์ธก ์ˆœํšŒ
64+
if (prev !== null && node.val <= prev) return false;
65+
prev = node.val;
66+
67+
return inorder(node.right);
68+
}
69+
70+
return inorder(root);
71+
};
72+
// ๋‘˜๋‹ค ์‹œ๊ฐ„๋ณต์žก๋„ O(N)์ด๋‹ค.
73+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(h) (์žฌ๊ท€ ์Šคํƒ๋งŒํผ)
74+

0 commit comments

Comments
ย (0)