Skip to content

Commit 4c90350

Browse files
authored
Merge pull request #1739 from youngduck/main
[youngduck] WEEK 02 solutions
2 parents c6438e1 + 0e431df commit 4c90350

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed

โ€Ž3sum/youngduck.jsโ€Ž

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function(nums) {
6+
7+
// ์ตœ์•…์˜ ๊ฒฝ์šฐ 3์ค‘ for๋ฌธ์ด๋ฏ€๋กœ ํˆฌํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„์จ์„œ ์ตœ์ ํ™” ํ•ด๋„ for๋ฌธ ํ•˜๋‚˜๋Š” ํ•„์š”ํ•จ
8+
9+
// ๊ฒฐ๊ณผ ๋ฐฐ์—ด
10+
const result = [];
11+
12+
// ํˆฌํฌ์ธํ„ฐ ๊ธฐ๋ฒ• ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ •๋ ฌ
13+
nums.sort((a,b)=>a-b);
14+
15+
for(let i = 0; i < nums.length - 2; i++){
16+
// ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ
17+
if(i > 0 && nums[i] === nums[i-1]) continue;
18+
19+
let left = i + 1;
20+
let right = nums.length - 1;
21+
22+
while(left < right){
23+
const sum = nums[i] + nums[left] + nums[right];
24+
25+
if(sum < 0){
26+
left++;
27+
}
28+
else if (sum > 0){
29+
right--;
30+
}
31+
else{
32+
// ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€
33+
result.push([nums[i], nums[left], nums[right]]);
34+
35+
// ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ
36+
while(left < right && nums[left] === nums[left + 1]) left++;
37+
while(left < right && nums[right] === nums[right - 1]) right--;
38+
39+
left++;
40+
right--;
41+
}
42+
}
43+
}
44+
45+
return result;
46+
};
47+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n^2)
48+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
49+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function (n) {
6+
// ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๋“  ์ƒ๊ฐ: dfs์ฒ˜๋Ÿผ ํ•˜๋‚˜์”ฉ,๋‘๊ฐœ์”ฉ ๊ฐ€์ง€๋ป—์–ด๊ฐ€๋ฉด์„œ? -> ์ ํ™”์‹,ํ”ผ๋ณด๋‚˜์น˜์ฒ˜๋Ÿผ ์ตœ์ ํ™”๋œ ํ˜•ํƒœ๊ฒ ๋Š”๋ฐ? ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ƒ๊ฐ. ๊ทผ๋ฐ 2์นธ์ „, 1์นธ์ „์˜ ๋ง์…ˆ์ด๋ผ๋Š” ๊ฒฐ๋ก ๊นŒ์ง€ ๋‚ด์ง€๋Š” ๋ชปํ•จ
7+
8+
// ๊ทธ๋ž˜์„œ default๊ฐ’์„ n=1,2,3๊นŒ์ง€ ์„ธํŒ…ํ•ด๋†“๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ์ ํ™”์‹ ํ’€์ด ์ฐธ๊ณ  ํ›„ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ฐœํ•ด์„œ 2์นธ์ „, 1์นธ์ „์— ๋Œ€ํ•œ ์ƒํ™ฉ์— ์ง‘์ค‘ํ•˜๋Š” ๋ฐฉ์‹ ์ดํ•ด ์™„๋ฃŒ. ๊ตฌํ˜„์€ ๋‚ด๊ฐ€ ์ง์ ‘.
9+
if (n === 1) {
10+
return 1;
11+
}
12+
13+
if (n === 2) {
14+
return 2;
15+
}
16+
17+
return climbStairs(n - 1) + climbStairs(n - 2);
18+
};
19+
20+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(2^n)
21+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
22+
23+
/**
24+
* @param {number} n
25+
* @return {number}
26+
*/
27+
var climbStairsOptimized = function (n) {
28+
const dp = Array(n).fill(0);
29+
dp[1] = 1;
30+
dp[2] = 2;
31+
32+
if (n >= 3) {
33+
for (let i = 3; i <= n; i++) {
34+
dp[i] = dp[i - 1] + dp[i - 2];
35+
}
36+
}
37+
38+
return dp[n];
39+
};
40+
41+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
42+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(n) !! dp๋ผ๋Š” ๋ฐฐ์—ด๋Œ€์‹  ๋ณ€์ˆ˜ ๋‘๊ฐœ๋กœ O(1)๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
var productExceptSelf = function (nums) {
6+
const numsLength = nums.length;
7+
8+
const result = new Array(numsLength).fill(1);
9+
10+
// ์ผ๋ฐ˜์ ์œผ๋กœ for๋ฌธ ํ•˜๋‚˜๋กœ ์ž๊ธฐ์ž์‹  ์ œ์™ธํ•˜๋ฉด์„œ ๊ณฑ์…ˆ์„ํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ• ๊ฒฝ์šฐ O(n^2).
11+
// for๋ฌธ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ• ๊ฒฝ์šฐ O(n). ๋ˆ„์ ๊ณฑ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด์ค˜์•ผํ•จ
12+
// for๋ฌธ ํ•˜๋‚˜๋กœ ๋ˆ„์ ๊ณฑ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ• ๊ฒฝ์šฐ O(n).
13+
14+
let left = 1;
15+
let right = 1;
16+
17+
for (let i = 0; i < numsLength; i++) {
18+
result[i] *= left;
19+
left *= nums[i];
20+
21+
result[numsLength - i - 1] *= right;
22+
right *= nums[numsLength - i - 1];
23+
}
24+
25+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
26+
27+
return result;
28+
};

โ€Žvalid-anagram/youngduck.jsโ€Ž

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*/
6+
var isAnagram = function (s, t) {
7+
const mapS = new Map();
8+
const mapT = new Map();
9+
10+
[...s].map((item) => {
11+
if (mapS.has(item)) {
12+
const itemCount = mapS.get(item);
13+
mapS.set(item, itemCount + 1);
14+
} else {
15+
mapS.set(item, 1);
16+
}
17+
});
18+
19+
[...t].map((item) => {
20+
if (mapT.has(item)) {
21+
const itemCount = mapT.get(item);
22+
mapT.set(item, itemCount + 1);
23+
} else {
24+
mapT.set(item, 1);
25+
}
26+
});
27+
28+
// NOTE - t๊ฐ€ s์˜ anagram์ด๋ผ๋Š” ๋œป์„ ๊ฐฏ์ˆ˜๊ฐ€ ๊ฐ™์ง€์•Š์•„๋„ ๋œ๋‹ค๊ณ  ์ดํ•ดํ–ˆ์œผ๋‚˜ anagram์ •์˜๋Š” s๊ตฌ์„ฑ์›์„ ๋ชจ์ž๋žŒ,๋‚จ๊น€์—†์ด t๋ฅผ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
29+
if (mapS.size !== mapT.size) {
30+
return false;
31+
}
32+
33+
for (const [key, value] of mapS) {
34+
if (mapT.get(key) !== value) {
35+
return false;
36+
}
37+
}
38+
39+
return true;
40+
};
41+
42+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
43+
// - ๋ฌธ์ž์—ด s์™€ t๋ฅผ ๊ฐ๊ฐ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒ: O(n) + O(n) = O(2n) = O(n)
44+
// - Map ๋น„๊ต๋ฅผ ์œ„ํ•œ ์ˆœํšŒ: O(k), ์—ฌ๊ธฐ์„œ k๋Š” ๊ณ ์œ  ๋ฌธ์ž ๊ฐœ์ˆ˜
45+
// - ๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)
46+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
47+
// - ๋‘ ๊ฐœ์˜ Map ๊ฐ์ฒด ์ƒ์„ฑ: mapS์™€ mapT
48+
// - ๊ฐ Map์€ ์ตœ๋Œ€ k๊ฐœ์˜ ๊ณ ์œ  ๋ฌธ์ž๋ฅผ ์ €์žฅ (k๋Š” ๊ณ ์œ  ๋ฌธ์ž ๊ฐœ์ˆ˜)
49+
// - ์†Œ๋ฌธ์ž ์˜๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ k โ‰ค 26 (a-z)
50+
// - ๋”ฐ๋ผ์„œ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1) (์ƒ์ˆ˜ ์‹œ๊ฐ„)
51+
52+
// follow up: ์œ ๋‹ˆ์ฝ”๋“œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค. ํฐ ์˜๋ฏธ๋Š” ์—†์Œ
53+
// console.log(isAnagram("๐Ÿ˜€๐Ÿ˜€", "๐Ÿ˜€๐Ÿ˜€๐Ÿ˜€")); // false
54+
// console.log(isAnagram("ํ•œ๊ธ€๊ธ€", "๊ธ€ํ•œ๊ธ€")); // true
55+
// console.log(isAnagram("cafรฉ", "รฉfac")); // true
56+
// console.log(isAnagram("Helloไธ–็•Œ", "ไธ–็•ŒHello")); // true
57+
// console.log(isAnagram("์•ˆ๋…• ํ•˜์„ธ์š”", "ํ•˜์„ธ์š” ์•ˆ๋…•")); // true
58+
// console.log(isAnagram("Cafรฉ", "รฉfac")); // false
59+
// console.log(isAnagram("Cafรฉ", "ร‰fac")); // false

0 commit comments

Comments
ย (0)