Skip to content

Commit c9f3606

Browse files
authored
Merge pull request #1680 from solbijae/main
[solbijae] WEEK 01 solutions
2 parents 7011519 + f639445 commit c9f3606

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed

contains-duplicate/solbijae.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function containsDuplicate(nums: number[]): boolean {
2+
const set = new Set(nums);
3+
const setSize = set.size;
4+
const numsLength = nums.length;
5+
6+
return setSize !== numsLength ? true : false;
7+
8+
// Big O
9+
// 시간 복잡도: O(n) 한번씩 순회하면서 확인
10+
// 공간 복잡도: O(n) Set을 사용해 배열 크기만큼 메모리가 더 사용됨
11+
};

house-robber/solbijae.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
function rob(nums: number[]): number {
2+
// 첫시도: 아예 떨어져있는 경우를 고려하지 않음 (통과 안됨)
3+
// let evenSum = 0;
4+
// let oddSum = 0;
5+
6+
// for (let i=0; i<nums.length; i++) {
7+
// if (i % 2 === 0) {
8+
// evenSum += nums[i];
9+
// } else {
10+
// oddSum += nums[i];
11+
// }
12+
// }
13+
14+
// return Math.max(evenSum, oddSum);
15+
16+
// 시간복잡도 O(n), 공간복잡도 O(1)
17+
if (nums.length === 0) return 0;
18+
if (nums.length === 1) return nums[0];
19+
20+
let prev = nums[0];
21+
let max = Math.max(nums[0], nums[1]);
22+
23+
for (let i = 2; i < nums.length; i++) {
24+
const current = Math.max(max, prev + nums[i]);
25+
prev = max;
26+
max = current;
27+
}
28+
29+
return max;
30+
};
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
function longestConsecutive(nums: number[]): number {
2+
// 첫 시도: sort때문에 시간 복잡도가 O(n log n)라 O(n)에 풀어야 한다는 요구사항 만족하지 못함, 공간복잡도는 O(n)
3+
// if (nums.length === 0) return 0;
4+
// const sorted = [...new Set(nums)].sort((a, b) => a-b);
5+
// let max = 1;
6+
// let current = 1;
7+
8+
// for (let i=0; i<nums.length; i++) {
9+
// console.log(sorted[i])
10+
// if (sorted[i+1] - sorted[i] === 1) {
11+
// current += 1;
12+
// } else {
13+
// current = 1;
14+
// }
15+
16+
// max = Math.max(max, current);
17+
// }
18+
19+
// return max;
20+
21+
// 두번째 시도: 시간, 공간복잡도 O(n)
22+
if (nums.length === 0) return 0;
23+
24+
const numSet = new Set(nums);
25+
let current = 0;
26+
let consecutive = 1;
27+
let max = 1;
28+
29+
for (let num of numSet) {
30+
if (!numSet.has(num - 1)) {
31+
current = num;
32+
consecutive = 1;
33+
34+
while (numSet.has(current + 1)) {
35+
consecutive += 1;
36+
current = current + 1;
37+
}
38+
39+
max = Math.max(consecutive, max);
40+
}
41+
}
42+
43+
return max;
44+
};

top-k-frequent-elements/solbijae.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function topKFrequent(nums: number[], k: number): number[] {
2+
const map = new Map();
3+
4+
for (let i=0; i<nums.length; i++) {
5+
const num = nums[i]
6+
map.set(num, (map.get(num)|| 0) + 1 );
7+
}
8+
9+
return [...map.entries()]
10+
.sort((a, b) => b[1] - a[1])
11+
.slice(0, k)
12+
.map(([key]) => key);
13+
};
14+
15+
// 시간 복잡도: O(n log n)
16+
// 공간 복잡도: O(n)

two-sum/solbijae.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function twoSum(nums: number[], target: number): number[] {
2+
// 첫 코드: 시간 복잡도가 O(n^2)로 개선 필요
3+
// for (let i=0; i<nums.length-1; i++) {
4+
// for (let j=1; j<nums.length; j++) {
5+
// if (nums[i] + nums[j] === target) return [i, j];
6+
// }
7+
// }
8+
9+
// 시간 공간 모두 O(n)으로 만들기 위해 해시맵 사용
10+
const map = new Map();
11+
for (let i=0; i<nums.length; i++) {
12+
const complement = target - nums[i];
13+
if (map.get(complement) !== undefined) {
14+
return [map.get(complement)!, i];
15+
} else {
16+
map.set(nums[i], i);
17+
}
18+
}
19+
};

0 commit comments

Comments
 (0)