Skip to content

Commit 8cbcb82

Browse files
Merge pull request #1976 from khg0712/week-1
[khg0712] WEEK 01 solutions
2 parents f1b4309 + 0ce4565 commit 8cbcb82

File tree

5 files changed

+100
-0
lines changed

5 files changed

+100
-0
lines changed

contains-duplicate/khg0712.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// NOTE: set을 사용해서 중복된 엘리먼트가 있는 경우 true 리턴
2+
function containsDuplicate(nums: number[]): boolean {
3+
const set = new Set();
4+
for(const num of nums) {
5+
if(set.has(num)) {
6+
return true;
7+
}
8+
set.add(num);
9+
}
10+
11+
return false;
12+
};

house-robber/khg0712.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function rob(nums: number[]): number {
2+
// 시간 초과를 막기 위해 Memo 객체 추가
3+
const memo: Record<number, number> = {};
4+
5+
function dfs (start: number): number {
6+
// memo에 저장된 값 있으면 사용
7+
if(memo[start] != null) {
8+
return memo[start];
9+
}
10+
11+
// 배열 벗어난 인덱스 접근이면 0리턴
12+
if(start >= nums.length) {
13+
return 0;
14+
}
15+
16+
// 현재 요소의 값과 하나 건너뛴 요소의 기대값 / 다음 요소의 기대값 중 더 큰 값을 사용
17+
memo[start] = Math.max(nums[start] + dfs(start + 2), dfs(start + 1));
18+
return memo[start];
19+
}
20+
21+
return dfs(0);
22+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function longestConsecutive(nums: number[]): number {
2+
const set = new Set(nums);
3+
let maxCount = 0;
4+
5+
for (const num of set) {
6+
// 시작 시점이 되는 숫자부터 시작.
7+
const isStart = !set.has(num - 1);
8+
if(!isStart) continue;
9+
10+
let count = 0;
11+
let _num = num;
12+
while(true) {
13+
count += 1;
14+
const hasNext = set.has(_num + 1);
15+
16+
// 다음 요소가 없을 때 까지 순회하다가 최대 카운트를 override
17+
if(!hasNext) {
18+
maxCount = Math.max(maxCount, count);
19+
break;
20+
}
21+
22+
// 한 번 사용한 숫자는 제거
23+
set.delete(_num);
24+
_num+=1;
25+
}
26+
}
27+
28+
return maxCount
29+
};

top-k-frequent-elements/khg0712.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+
// nums 순회하면서 각 숫자 개수 카운트
3+
const dict = nums.reduce((acc: Record<number, number>, v) => {
4+
if(acc[v] != null) {
5+
acc[v] += 1;
6+
} else {
7+
acc[v] = 1
8+
}
9+
return acc;
10+
}, {});
11+
12+
13+
// 내림차순으로 정렬하고, k개 만큼 자르고 배열로 반환
14+
const result = Object.entries(dict).sort((a, b) => b[1] - a[1]).slice(0, k);
15+
return result.map(([key]) => parseInt(key));
16+
};

two-sum/khg0712.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function twoSum(nums: number[], target: number): number[] {
2+
// hasTable을 생성
3+
const hashTable = nums.reduce((acc, v, i) => {
4+
acc[v] = i;
5+
return acc;
6+
}, {});
7+
8+
9+
10+
for (const index of nums.keys()) {
11+
const v = nums[index];
12+
const remain = target - v;
13+
14+
// target을 만들기 위해 필요한 값을 hashTable에서 조회하고 있으면 결과로 리턴
15+
if(hashTable.hasOwnProperty(remain) && index !== hashTable[remain]) {
16+
return [index, hashTable[remain]];
17+
}
18+
}
19+
20+
return []
21+
};

0 commit comments

Comments
 (0)