Skip to content

Commit 96681ef

Browse files
authored
Merge pull request #2063 from smosco/main
[smosco] WEEK 02 solutions
2 parents fc2d9d9 + 9df34f3 commit 96681ef

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

โ€Žclimbing-stairs/smosco.jsโ€Ž

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* ๋ณต์žก๋„ ๋ถ„์„:
3+
* - ์‹œ๊ฐ„: O(n) - 3๋ถ€ํ„ฐ n๊นŒ์ง€ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒ
4+
* - ๊ณต๊ฐ„: O(1) - prev1, prev2 ๋‘ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
5+
*/
6+
7+
/**
8+
* @param {number} n
9+
* @return {number}
10+
*/
11+
const climbStairs = (n) => {
12+
// ๊ธฐ๋ณธ ์ผ€์ด์Šค: 1์นธ์ด๋ฉด 1๊ฐ€์ง€, 2์นธ์ด๋ฉด 2๊ฐ€์ง€
13+
if (n <= 2) return n;
14+
15+
/**
16+
* ์•„์ด๋””์–ด:
17+
* n๋ฒˆ์งธ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• =
18+
* 1) n-1๋ฒˆ์งธ ๊ณ„๋‹จ์—์„œ 1์นธ ์˜ค๋ฅด๊ธฐ
19+
* 2) n-2๋ฒˆ์งธ ๊ณ„๋‹จ์—์„œ 2์นธ ์˜ค๋ฅด๊ธฐ
20+
*
21+
* ์ฆ‰, f(n) = f(n-1) + f(n-2) ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ๋™์ผ
22+
*
23+
* ์žฌ๊ท€๋กœ ํ’€๋ฉด ์ค‘๋ณต ๊ณ„์‚ฐ์ด ๋งŽ์•„์„œ ๋น„ํšจ์œจ์ 
24+
* โ†’ ์ด์ „ ๋‘ ๊ฐ’๋งŒ ๊ธฐ์–ตํ•˜๋ฉด์„œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•ด๊ฒฐ
25+
*/
26+
27+
let prev2 = 1; // f(1) = 1
28+
let prev1 = 2; // f(2) = 2
29+
30+
// 3๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๊ณ„์‚ฐ
31+
for (let i = 3; i <= n; i++) {
32+
const current = prev1 + prev2; // ํ˜„์žฌ = ์ด์ „ + ์ด์ „์˜ ์ด์ „
33+
prev2 = prev1; // ๊ฐ’๋“ค์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ์ด๋™
34+
prev1 = current;
35+
}
36+
37+
return prev1;
38+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* ๋ณต์žก๋„ ๋ถ„์„:
3+
* - ์‹œ๊ฐ„: O(n) - ๋ฐฐ์—ด์„ ๋‘ ๋ฒˆ ์ˆœํšŒ (์™ผ์ชฝโ†’์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝโ†’์™ผ์ชฝ)
4+
* - ๊ณต๊ฐ„: O(1) - answer ๋ฐฐ์—ด์€ ์ถœ๋ ฅ์ด๋ฏ€๋กœ ์ œ์™ธ, rightProduct ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
5+
*/
6+
7+
/**
8+
* @param {number[]} nums
9+
* @return {number[]}
10+
*/
11+
const productExceptSelf = (nums) => {
12+
const n = nums.length;
13+
const answer = new Array(n);
14+
15+
/**
16+
* ์•„์ด๋””์–ด:
17+
* answer[i] = (i ์™ผ์ชฝ ๋ชจ๋“  ์š”์†Œ์˜ ๊ณฑ) ร— (i ์˜ค๋ฅธ์ชฝ ๋ชจ๋“  ์š”์†Œ์˜ ๊ณฑ)
18+
*
19+
* ์˜ˆ์‹œ: [1, 2, 3, 4]
20+
* - ์™ผ์ชฝ ๊ณฑ: [1, 1, 2, 6]
21+
* - ์˜ค๋ฅธ์ชฝ ๊ณฑ: [24, 12, 4, 1]
22+
* - ๊ฒฐ๊ณผ: [24, 12, 8, 6]
23+
*/
24+
25+
// 1๋‹จ๊ณ„: ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์™ผ์ชฝ ๊ณฑ ์ €์žฅ
26+
answer[0] = 1; // ์ฒซ ๋ฒˆ์งธ๋Š” ์™ผ์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฏ€๋กœ 1
27+
for (let i = 1; i < n; i++) {
28+
answer[i] = answer[i - 1] * nums[i - 1]; // ์ด์ „๊นŒ์ง€์˜ ๊ณฑ ร— ์ด์ „ ์š”์†Œ
29+
}
30+
31+
// 2๋‹จ๊ณ„: ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๊ณฑํ•ด์คŒ
32+
let rightProduct = 1; // ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๋ˆ„์ ํ•  ๋ณ€์ˆ˜
33+
for (let i = n - 1; i >= 0; i--) {
34+
answer[i] *= rightProduct; // ์™ผ์ชฝ ๊ณฑ ร— ์˜ค๋ฅธ์ชฝ ๊ณฑ
35+
rightProduct *= nums[i]; // ๋‹ค์Œ ์ˆœํšŒ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์š”์†Œ ๊ณฑํ•จ
36+
}
37+
38+
return answer;
39+
};

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

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

0 commit comments

Comments
ย (0)