Skip to content

Commit 78828fa

Browse files
authored
Merge pull request #2427 from reeseo3o/main
[reeseo3o] WEEK 02 solutions
2 parents e7ff09f + 13e1178 commit 78828fa

3 files changed

Lines changed: 124 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋ฌธ์ œ
2+
const climbStairs = (n) => {
3+
// f(n) = f(n-1) + f(n-2)
4+
if (n <= 2) return n;
5+
6+
let prev2 = 1;
7+
let prev1 = 2;
8+
9+
for (let i = 3; i <= n; i++) {
10+
let current = prev1 + prev2;
11+
prev2 = prev1;
12+
prev1 = current;
13+
}
14+
15+
return prev1;
16+
};
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// brute force ๋ฐฉ์‹์œผ๋กœ ํ’€์ด - O(n^2)
2+
const productExceptSelf = (nums) => {
3+
const answer = [];
4+
for (let i = 0; i < nums.length; i++) {
5+
let product = 1;
6+
for (let j = 0; j < nums.length; j++) {
7+
if (i !== j) {
8+
product *= nums[j];
9+
}
10+
}
11+
answer.push(product);
12+
}
13+
return answer;
14+
};
15+
16+
// Prefix-Suffix Array - ์‹œ๊ฐ„ O(n) / ๊ณต๊ฐ„ O(n)
17+
const productExceptSelf2 = (nums) => {
18+
const n = nums.length;
19+
20+
// 1. ์„ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค
21+
const prefix = new Array(n).fill(1);
22+
const suffix = new Array(n).fill(1);
23+
const answer = new Array(n).fill(1);
24+
25+
// 2. prefix ์ฑ„์šฐ๊ธฐ: ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ
26+
// i=0์€ ์™ผ์ชฝ์ด ์—†์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ 1
27+
// i=1๋ถ€ํ„ฐ ์‹œ์ž‘
28+
for (let i = 1; i < n; i++) {
29+
prefix[i] = prefix[i - 1] * nums[i - 1];
30+
}
31+
32+
// 3. suffix ์ฑ„์šฐ๊ธฐ: ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ
33+
// i=n-1์€ ์˜ค๋ฅธ์ชฝ์ด ์—†์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ 1
34+
// i=n-2๋ถ€ํ„ฐ ์‹œ์ž‘
35+
for (let i = n - 2; i >= 0; i--) {
36+
suffix[i] = suffix[i + 1] * nums[i + 1];
37+
}
38+
39+
// 4. prefix * suffix
40+
for (let i = 0; i < n; i++) {
41+
answer[i] = prefix[i] * suffix[i];
42+
}
43+
44+
return answer;
45+
};
46+
47+
// Two-Pass Optimized - ์‹œ๊ฐ„ O(n) / ๊ณต๊ฐ„ O(1)
48+
const productExceptSelf3 = (nums) => {
49+
const products = new Array(nums.length).fill(1);
50+
51+
// 1. before๋กœ ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ์„ products[i+1]์— ๋ˆ„์ 
52+
let before = 1;
53+
for (let i = 0; i < nums.length - 1; i++) {
54+
before *= nums[i];
55+
products[i + 1] *= before;
56+
}
57+
58+
// 2. after๋กœ ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ์„ products[i-1]์— ๋ˆ„์ 
59+
let after = 1;
60+
for (let i = nums.length - 1; i > 0; i--) {
61+
after *= nums[i];
62+
products[i - 1] *= after;
63+
}
64+
65+
return products;
66+
};

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Anagram - ๋‘ย ๋ฌธ์ž์—ด์ดย ๊ฐ™์€ย ์•ŒํŒŒ๋ฒณ์„ย ๊ฐ™์€ย ๊ฐœ์ˆ˜๋งŒํผย ๊ฐ€์ง€๊ณ ย ์žˆ์–ด์•ผ ํ•จ.
2+
3+
// O(n log n) - ์ •๋ ฌ ๋ฐฉ์‹
4+
const isAnagram = (s, t) => {
5+
// 1๋‹จ๊ณ„: ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ ˆ๋Œ€ anagram ๋ถˆ๊ฐ€ โ†’ ๋ฐ”๋กœ false ๋ฐ˜ํ™˜
6+
if (s.length !== t.length) return false;
7+
8+
// 2๋‹จ๊ณ„: ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ์ชผ๊ฐœ๊ณ  โ†’ ์ •๋ ฌํ•˜๊ณ  โ†’ ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์น˜๊ธฐ
9+
const sortedS = s.split('').sort().join('');
10+
const sortedT = t.split('').sort().join('');
11+
12+
// 3๋‹จ๊ณ„: ์ •๋ ฌ๋œ ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์œผ๋ฉด anagram
13+
return sortedS === sortedT;
14+
};
15+
16+
// O(n) - ํ•ด์‹œ๋งต ๋ฐฉ์‹
17+
const isAnagram2 = (s, t) => {
18+
// [์ฃผ์˜] s.length๋Š” ์‹ค์ œ ๋ฌธ์ž ์ˆ˜๊ฐ€ ์•„๋‹Œ UTF-16 ์ฝ”๋“œ ์œ ๋‹› ์ˆ˜๋ฅผ ์…ˆ. - "The number of UTF-16 code units in the string"
19+
// ์ด๋ชจ์ง€ ๊ฐ™์€ ๋ฌธ์ž๋Š” ์ฝ”๋“œ ์œ ๋‹› 2๊ฐœ๋ฅผ ์ฐจ์ง€ํ•ด์„œ ์‹ค์ œ ๋ฌธ์ž ์ˆ˜์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.
20+
// "๐Ÿ˜€".length โ†’ 2 (์ฝ”๋“œ ์œ ๋‹› ๊ธฐ์ค€)
21+
// [..."๐Ÿ˜€"].length โ†’ 1 (์‹ค์ œ ๋ฌธ์ž ๊ธฐ์ค€)
22+
// Unicode ์™„์ „ ๋Œ€์‘์ด ํ•„์š”ํ•˜๋ฉด [...s].length !== [...t].length ๋กœ ์ˆ˜์ •.
23+
// ์ด ๋ฌธ์ œ๋Š” ์†Œ๋ฌธ์ž ์˜์–ด ์•ŒํŒŒ๋ฒณ๋งŒ ๋‹ค๋ฃจ๋ฏ€๋กœ s.length ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉ.
24+
if (s.length !== t.length) return false;
25+
26+
const count = {};
27+
28+
// for...of๋Š” ์‹ค์ œ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ˆœํšŒํ•˜๋ฏ€๋กœ Unicode ์•ˆ์ „.
29+
// count[char]๊ฐ€ ์—†์œผ๋ฉด 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ›„ +1.
30+
for (const char of s) {
31+
count[char] = (count[char] || 0) + 1;
32+
}
33+
34+
// t์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ count์— ์—†๊ฑฐ๋‚˜(0, undefined) โ†’ s์— ์—†๋Š” ๋ฌธ์ž โ†’ false.
35+
for (const char of t) {
36+
if (!count[char]) return false;
37+
count[char]--;
38+
}
39+
40+
// ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์†Œ์ง„๋˜๋ฉด anagram.
41+
return true;
42+
};

0 commit comments

Comments
ย (0)