Skip to content

Commit e4bf20a

Browse files
authored
Merge pull request #725 from limlimjo/main
[jj7779607] Week2
2 parents 2d55165 + 49c963f commit e4bf20a

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

โ€Ž3sum/limlimjo.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function (nums) {
6+
const result = []; // ๊ฒฐ๊ณผ๊ฐ’
7+
nums.sort((a, b) => a - b); // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ณ
8+
9+
// ๋ฐฐ์—ด ์ˆœ์ฐจ ํƒ์ƒ‰
10+
for (let i = 0; i < nums.length - 2; i++) {
11+
// ์ค‘๋ณต ๊ฐ’ ๊ฑด๋„ˆ๋œ€
12+
if (i > 0 && nums[i] === nums[i - 1]) continue;
13+
14+
let low = i + 1,
15+
high = nums.length - 1;
16+
17+
// low์™€ high ํฌ์ธํ„ฐ ์ด์šฉํ•ด ํ•ฉ์ด 0์ธ ๊ฐ’ ์ฐพ๊ธฐ
18+
while (low < high) {
19+
const sum = nums[i] + nums[low] + nums[high];
20+
if (sum < 0) low++;
21+
else if (sum > 0) high--;
22+
else {
23+
result.push([nums[i], nums[low], nums[high]]);
24+
// ์ค‘๋ณต๋œ ๊ฐ’ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
25+
while (low < high && nums[low] === nums[low + 1]) low++;
26+
while (low < high && nums[high] === nums[high - 1]) high--;
27+
low++;
28+
high--;
29+
}
30+
}
31+
}
32+
33+
return result;
34+
};
35+
36+
// 1์‹œ๊ฐ„ ์ •๋„ ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ •๋ ฌ๊นŒ์ง€ ํ•œ ๋‹ค์Œ ๊ทธ ์ดํ›„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ ํ’€์ด ์ฐธ๊ณ 
37+
// ๋ฌธ์ œ ํ’€์ด์—์„œ ํ•ต์‹ฌ์€ ์ •๋ ฌ์„ ํ•œ ๋‹ค์Œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ง€์ •ํ•ด sum์ด 0์ธ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ
38+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2) ๋ฐฐ์—ด ์ˆœ์ฐจ ํƒ์ƒ‰
39+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1) ๊ฒฐ๊ณผ๊ฐ’ result

โ€Žclimbing-stairs/limlimjo.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function (n) {
6+
// ๊ทœ์น™์„ฑ ์ฐพ๊ธฐ
7+
// n = 1 -> 1 (1)
8+
// n = 2 -> 2 (1+1, 2)
9+
// n = 3 -> 2 + 1 = 3 (1+1+1, 1+2, 2+1)
10+
// n = 4 -> 2 + 3 = 5 (1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2)
11+
// n = 5 -> 3 + 5 = 8 (1+1+1+1+1, 1+1+1+2, 1+1+2+1, 1+2+1+1, 2+1+1+1, 1+2+2, 2+2+1, 2+1+2)
12+
// :
13+
// :
14+
// ๊ทœ์น™ -> n๋ฒˆ์งธ ๋ฐฉ๋ฒ• ๊ฐฏ์ˆ˜ = n-1๋ฒˆ์งธ ๋ฐฉ๋ฒ• ๊ฐฏ์ˆ˜ + n-2๋ฒˆ์งธ ๋ฐฉ๋ฒ• ๊ฐฏ์ˆ˜
15+
16+
// 1. ๊ฐ์ฒด ์ƒ์„ฑ (n=1์ผ ๋•Œ, n=2์ผ ๋•Œ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •)
17+
let dp = { 1: 1, 2: 2 };
18+
19+
// 2. n=3์ผ ๋•Œ๋ถ€ํ„ฐ dp๊ฐ’ ๊ณ„์‚ฐ
20+
for (let i = 3; i <= n; i++) {
21+
dp[i] = dp[i - 1] + dp[i - 2];
22+
}
23+
24+
// 3. ๊ฒฐ๊ณผ๊ฐ’ ๋ฐ˜ํ™˜
25+
return dp[n];
26+
};
27+
28+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) <- for๋ฌธ ๋Œ๋ฉด์„œ dp๊ฐ’ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ
29+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) <- dp ๊ฐ์ฒด์— n๊ฐœ์˜ ๊ฐ’ ์ €์žฅํ•˜๋ฏ€๋กœ

โ€Žvalid-anagram/limlimjo.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*/
6+
var isAnagram = function (s, t) {
7+
// ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด false
8+
if (s.length !== t.length) {
9+
return false;
10+
}
11+
12+
// s ๋นˆ๋„์ˆ˜, t ๋นˆ๋„์ˆ˜
13+
const countS = {};
14+
const countT = {};
15+
16+
// ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๊ธฐ
17+
for (let i = 0; i < s.length; i++) {
18+
countS[s[i]] = (countS[s[i]] || 0) + 1;
19+
countT[t[i]] = (countT[t[i]] || 0) + 1;
20+
}
21+
22+
// ๋‘ ๊ฐ์ฒด ๋™์ผํ•˜๋ฉด true, ์•„๋‹ˆ๋ฉด false
23+
for (let char in countS) {
24+
if (countS[char] !== countT[char]) {
25+
return false;
26+
}
27+
}
28+
return true;
29+
};
30+
31+
// ์‹œ๊ฐ„๋ณต์žก๋„: for๋ฌธ ์ˆœํšŒ ๋น„๊ตํ•˜๋ฏ€๋กœ O(n)
32+
// ๊ณต๊ฐ„๋ณต์žก๋„: countS, countT ์ตœ๋Œ€ n๊ฐœ์˜ ํ‚ค ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ O(n)

0 commit comments

Comments
ย (0)