Skip to content

Commit 3df130c

Browse files
authored
Merge pull request #715 from choidabom/main
[choidabom] Week 2
2 parents a7c348f + 2a9c9a7 commit 3df130c

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

climbing-stairs/choidabom.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Time Complexity: O(N)
3+
* Space Complexity: O(N)
4+
*
5+
* 접근: 1번째 계단을 오르는 방법은 1가지, 2번째 계단을 오르는 방법은 2가지 (계단은 한 번에 1칸 또는 2칸씩만 오를 수 있다.)
6+
* n 번째 계단에 오르는 방법은 '한 칸 전 계단(n-1)에서 오르는 1칸 올라오는 방법' + '두 칸 전 계단(n-2)에서 2칸 올라오는 방법'
7+
*/
8+
9+
function climbStairs(n: number): number {
10+
let stairs = [1, 2];
11+
12+
for (let i = 2; i < n; i++) {
13+
stairs[i] = stairs[i - 1] + stairs[i - 2];
14+
}
15+
16+
return stairs[n - 1];
17+
}
18+
19+
function climbStairs(n: number): number {
20+
let dp = new Array(n + 1).fill(0);
21+
dp[1] = 1;
22+
dp[2] = 2;
23+
24+
for (let i = 3; i < n + 1; i++) {
25+
dp[i] = dp[i - 1] + dp[i - 2];
26+
}
27+
28+
return dp[n];
29+
}
30+
31+
console.log(climbStairs(5));

valid-anagram/choidabom.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* Runtime: 24ms, Memory: 55.95MB
3+
*
4+
* 접근: 문자들끼리 anagram 관계인 경우, 정렬했을 때 같은 값을 가지기에 각 문자열 정렬 후 비교.
5+
*/
6+
7+
function isAnagram(s: string, t: string): boolean {
8+
if (s.length !== t.length) {
9+
return false;
10+
}
11+
return sortedString(s) === sortedString(t);
12+
}
13+
14+
function sortedString(s: string): string {
15+
return s.split("").sort().join("");
16+
}
17+
18+
/**
19+
* Runtime: 19ms, Memory: 55.02MB
20+
*
21+
* 접근: 문자들끼리 anagram 관계인 경우, 각 문자들의 count가 동일할 것이기에 Map 자료구조를 이용해서 합/차 계산
22+
* Time Complexity: O(N)
23+
* Space Complexity: O(N)
24+
*/
25+
function isAnagram(s: string, t: string): boolean {
26+
if (s.length !== t.length) {
27+
return false;
28+
}
29+
30+
let map = new Map<string, number>();
31+
for (const char of s) {
32+
if (map.has(char)) {
33+
map.set(char, map.get(char)! + 1);
34+
} else {
35+
map.set(char, 1);
36+
}
37+
}
38+
39+
for (const char of t) {
40+
if (map.has(char)) {
41+
map.set(char, map.get(char)! - 1);
42+
} else {
43+
return false;
44+
}
45+
}
46+
47+
for (const value of map.values()) {
48+
if (value !== 0) {
49+
return false;
50+
}
51+
}
52+
53+
return true;
54+
}
55+
56+
console.log(isAnagram("anagram", "nagaram"));

0 commit comments

Comments
 (0)