Skip to content

Commit 5a72122

Browse files
authored
Merge pull request #1241 from mike2ox/main
[moonhyeok song] WEEK 02 solutions
2 parents e2ee6f2 + 649cbe2 commit 5a72122

File tree

2 files changed

+62
-8
lines changed

2 files changed

+62
-8
lines changed

โ€Žclimbing-stairs/mike2ox.ts

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
1+
/**
2+
* Source: https://leetcode.com/problems/climbing-stairs/description/
3+
* ์š”์ : ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) ์ ‘๊ทผ๋ฒ• - ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ์œ ์‚ฌ
4+
* ํ’€์ด ์‹œ๊ฐ„: 25๋ถ„
5+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n) - ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป๊ธฐ์œ„ํ•ด n๋ฒˆ ๋ฐ˜๋ณต
6+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1) - ์ƒ์ˆ˜ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉ
7+
*/
18
function climbStairs(n: number): number {
2-
let result = 0;
3-
let step1 = 1;
4-
let step2 = 0;
9+
// ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์ „์— ์ฒ˜๋ฆฌ(๊ฐ€์ง€์น˜๊ธฐ)
10+
if (n <= 0) return 0;
11+
if (n === 1) return 1;
512

6-
for (let i = 0; i < n; i++) {
7-
result = step1 + step2;
8-
step2 = step1;
9-
step1 = result;
13+
// ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๋ณ€์ˆ˜
14+
let current = 1; // n=1์ผ ๋•Œ ๋ฐฉ๋ฒ•์˜ ์ˆ˜ (์ฒซ ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜)
15+
let prev = 1; // n=0์ผ ๋•Œ ๋ฐฉ๋ฒ•์˜ ์ˆ˜ (์ดˆ๊ธฐ๊ฐ’)
16+
let temp; // ๊ตํ™˜์„ ์œ„ํ•œ ์ž„์‹œ ๋ณ€์ˆ˜
17+
18+
// i๋Š” 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ n๊นŒ์ง€ ๋ฐ˜๋ณต
19+
for (let i = 2; i <= n; i++) {
20+
// ํ˜„์žฌ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜ = ์ด์ „ ๋‘ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜์˜ ํ•ฉ
21+
temp = current;
22+
current = current + prev;
23+
prev = temp;
1024
}
11-
return result;
25+
26+
return current;
1227
}

โ€Žvalid-anagram/mike2ox.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,43 @@
1+
/**
2+
* Source: https://leetcode.com/problems/valid-anagram/
3+
* ์š”์ : ๋‘ ๋ฌธ์ž์—ด์ด ์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
4+
* ํ’€์ด ์‹œ๊ฐ„: 5๋ถ„
5+
* ํ’€์ด๋ฐฉ๋ฒ•: ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜์—ฌ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ฌธ์ž ๋นˆ๋„์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•
6+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n log n) - ์ •๋ ฌ์ด ์ง€๋ฐฐ์ ์ธ ์—ฐ์‚ฐ
7+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(n) - ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„
8+
*/
19
function isAnagram(s: string, t: string): boolean {
210
if (s.length !== t.length) return false;
311
return s.split("").sort().join() === t.split("").sort().join();
412
}
13+
14+
/**
15+
* Solution2: ์ž๋ฃŒ๊ตฌ์กฐ Map์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐํ•ด ๋‘ ๋ฌธ์ž์—ด์ด ์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ
16+
* ํ’€์ด ์‹œ๊ฐ„: 23๋ถ„
17+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n) - ๋‹จ์ผ ์ˆœํšŒ๋กœ ํ•ด๊ฒฐ
18+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1) - ์ตœ๋Œ€ 26๊ฐœ ์•ŒํŒŒ๋ฒณ์— ๋Œ€ํ•œ ๊ณ ์ • ํฌ๊ธฐ ๋งต ์‚ฌ์šฉ
19+
*/
20+
function isAnagram2(s: string, t: string): boolean {
21+
// ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์• ๋„ˆ๊ทธ๋žจ์ด ๋  ์ˆ˜ ์—†์Œ
22+
if (s.length !== t.length) return false;
23+
24+
// ๊ฐ ๋ฌธ์ž์˜ ์ถœํ˜„ ๋นˆ๋„๋ฅผ ๊ธฐ๋กํ•  ๋ชฉ์ ์œผ๋กœ Map์„ ์‚ฌ์šฉ
25+
const charCount = new Map<string, number>();
26+
27+
// ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž ๋นˆ๋„ ์ฆ๊ฐ€
28+
for (const char of s) {
29+
charCount.set(char, (charCount.get(char) || 0) + 1);
30+
}
31+
32+
// ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž ๋นˆ๋„ ๊ฐ์†Œ
33+
for (const char of t) {
34+
const count = charCount.get(char);
35+
36+
// ๋ฌธ์ž๊ฐ€ ์—†๊ฑฐ๋‚˜ ๋นˆ๋„๊ฐ€ 0์ด๋ฉด ์• ๋„ˆ๊ทธ๋žจ์ด ์•„๋‹˜
37+
if (count === undefined || count === 0) return false;
38+
39+
charCount.set(char, count - 1);
40+
}
41+
42+
return true;
43+
}

0 commit comments

Comments
ย (0)