Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions climbing-stairs/1lsang.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// n번째 칸 까지 오르기 위해서는 n-1번째 칸에서 1칸을 오르거나 n-2번째 칸에서 2칸을 오르면 됨.

/*
최초에 생각한 방법은 재귀 구현 But 재귀 구현시에는 O(2^n)으로 시간복잡도가 너무 커서 Time Limit에 걸림.

function climbStairs(n: number): number {
if (n === 1) return 1; // 1칸을 오르는 방법은 1개
if (n === 2) return 2; // 2칸을 오르는 방법은 1+1/2 2개
return climbStairs(n-1) + climbStairs(n-2);
};
*/

function climbStairs(n: number): number {
const arr: number[] = [1, 2];
for (let i = 2; i < n; i++) {
arr.push(arr[i-1] + arr[i-2]);
}
return arr[n-1];
};
22 changes: 22 additions & 0 deletions product-of-array-except-self/1lsang.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// 배열에서 인덱스의 숫자만 제외한 원소의 곱의 배열을 return 하는 문제

// 1. 전체의 곱을 구한 뒤, 해당 인덱스의 수를 나눈 배열을 만들면,
// n을 2번만 반복하면 되므로 2n 즉, O(n)으로 해결 가능

// 2. 하지만 수에 0이 섞여있다면?
// 0을 곱한 경우는 전부 0이므로 해당 케이스 고려 필요
// 0이 1개인 경우 0이 아닌 모든 수의 곱이 0인 인덱스에 들어가고, 나머지는 0
// 0이 2개 이상인 경우 전부 0

function productExceptSelf(nums: number[]): number[] {
const zeroIndices:number[] = [];
nums.forEach((num, index) => {
if (num === 0) {
zeroIndices.push(index);
}
})
if (zeroIndices.length > 1) return Array.from({length: nums.length}).map(() => 0);
const productOfAll = nums.reduce((prev, cur) => (cur === 0 ? prev : prev * cur), 1);
if (zeroIndices.length === 1) return Array.from({length: nums.length}).map((_, index) => index === zeroIndices[0] ? productOfAll : 0);
return nums.map((num) => productOfAll/num);
};
13 changes: 13 additions & 0 deletions valid-anagram/1lsang.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const getCountObj = (s: string) => {
const obj:Record<string, number> = {};
s.split('').forEach((v) => obj[v] ? obj[v]+=1 : obj[v] = 1);
return obj;
}

const isEqual = (a: Record<string, number>, b: Record<string, number>) => {
return Object.entries(a).every(([key, value]) => b[key] === value)
}

function isAnagram(s: string, t: string): boolean {
return s.length === t.length && isEqual(getCountObj(s), getCountObj(t));
};