Skip to content

Commit 136fbff

Browse files
authored
Merge pull request #2066 from 1lsang/main
[1lsang] WEEK 02 Solutions
2 parents 4e4f68d + 5bdb0aa commit 136fbff

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

climbing-stairs/1lsang.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// n번째 칸 까지 오르기 위해서는 n-1번째 칸에서 1칸을 오르거나 n-2번째 칸에서 2칸을 오르면 됨.
2+
3+
/*
4+
최초에 생각한 방법은 재귀 구현 But 재귀 구현시에는 O(2^n)으로 시간복잡도가 너무 커서 Time Limit에 걸림.
5+
6+
function climbStairs(n: number): number {
7+
if (n === 1) return 1; // 1칸을 오르는 방법은 1개
8+
if (n === 2) return 2; // 2칸을 오르는 방법은 1+1/2 2개
9+
return climbStairs(n-1) + climbStairs(n-2);
10+
};
11+
*/
12+
13+
function climbStairs(n: number): number {
14+
const arr: number[] = [1, 2];
15+
for (let i = 2; i < n; i++) {
16+
arr.push(arr[i-1] + arr[i-2]);
17+
}
18+
return arr[n-1];
19+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// 배열에서 인덱스의 숫자만 제외한 원소의 곱의 배열을 return 하는 문제
2+
3+
// 1. 전체의 곱을 구한 뒤, 해당 인덱스의 수를 나눈 배열을 만들면,
4+
// n을 2번만 반복하면 되므로 2n 즉, O(n)으로 해결 가능
5+
6+
// 2. 하지만 수에 0이 섞여있다면?
7+
// 0을 곱한 경우는 전부 0이므로 해당 케이스 고려 필요
8+
// 0이 1개인 경우 0이 아닌 모든 수의 곱이 0인 인덱스에 들어가고, 나머지는 0
9+
// 0이 2개 이상인 경우 전부 0
10+
11+
function productExceptSelf(nums: number[]): number[] {
12+
const zeroIndices:number[] = [];
13+
nums.forEach((num, index) => {
14+
if (num === 0) {
15+
zeroIndices.push(index);
16+
}
17+
})
18+
if (zeroIndices.length > 1) return Array.from({length: nums.length}).map(() => 0);
19+
const productOfAll = nums.reduce((prev, cur) => (cur === 0 ? prev : prev * cur), 1);
20+
if (zeroIndices.length === 1) return Array.from({length: nums.length}).map((_, index) => index === zeroIndices[0] ? productOfAll : 0);
21+
return nums.map((num) => productOfAll/num);
22+
};

valid-anagram/1lsang.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const getCountObj = (s: string) => {
2+
const obj:Record<string, number> = {};
3+
s.split('').forEach((v) => obj[v] ? obj[v]+=1 : obj[v] = 1);
4+
return obj;
5+
}
6+
7+
const isEqual = (a: Record<string, number>, b: Record<string, number>) => {
8+
return Object.entries(a).every(([key, value]) => b[key] === value)
9+
}
10+
11+
function isAnagram(s: string, t: string): boolean {
12+
return s.length === t.length && isEqual(getCountObj(s), getCountObj(t));
13+
};

0 commit comments

Comments
 (0)