Skip to content

Commit 8893664

Browse files
committed
sadie100: Week 1 3문제 풀이
1 parent ea5ed1f commit 8893664

3 files changed

Lines changed: 82 additions & 0 deletions

File tree

house-robber/sadie100.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
dp 배열을 만들고 각 원소 순서에서 최대의 값을 계산, 리턴한다
3+
4+
시간복잡도
5+
O(N) : 단일 순회
6+
7+
공간복잡도
8+
O(N) : dp 배열
9+
*/
10+
11+
function rob(nums: number[]): number {
12+
const dp = []
13+
14+
for (let i = 0; i < nums.length; i++) {
15+
if (i < 1) {
16+
dp[i] = nums[i]
17+
} else if (i < 2) {
18+
dp[i] = Math.max(dp[i - 1], nums[i])
19+
} else {
20+
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])
21+
}
22+
}
23+
24+
return dp.at(-1)
25+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
nums를 Set으로 만들어서 중복을 제거하고 순회하면서 시작점(n-1이 Set에 없는 수)을 찾아 연속된 수를 찾아가며 length를 계산한다.
3+
시작점이 아닌 num(set에 num-1이 있는 경우)는 순회하지 않는다.
4+
5+
시간복잡도
6+
O(N) : 이중 반복문이지만 시작점에서만 탐색하므로 깊은 중복 순회가 없음
7+
*/
8+
9+
function longestConsecutive(nums: number[]): number {
10+
if (nums.length === 0) return 0
11+
const numSet = new Set(nums)
12+
let result = 1
13+
14+
for (let num of numSet) {
15+
if (numSet.has(num - 1)) {
16+
continue
17+
}
18+
19+
let next = num + 1
20+
let count = 1
21+
while (numSet.has(next)) {
22+
count += 1
23+
next += 1
24+
}
25+
26+
result = Math.max(result, count)
27+
}
28+
29+
return result
30+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
nums를 순회하며 {[num]: 등장횟수} 형태의 데이터로 바꾸고, 순회가 끝난후
3+
해당 데이터를 등장횟수 기준으로 내림차순 정렬하여 상위 k개를 리턴한다
4+
5+
O(N)
6+
시간복잡도 : O(NlogN)
7+
nums 순회 - O(N), 객체 배열화 - O(N), 정렬 - O(NLogN) 도합 O(NLogN)
8+
*/
9+
10+
function topKFrequent(nums: number[], k: number): number[] {
11+
const countObj: Record<number, number> = {}
12+
13+
for (let num of nums) {
14+
if (num in countObj) {
15+
countObj[num] += 1
16+
} else {
17+
countObj[num] = 1
18+
}
19+
}
20+
21+
const countArr = Object.entries(countObj)
22+
.sort((a, b) => b[1] - a[1])
23+
.map(([num, cnt]) => Number(num))
24+
.filter((val, idx) => idx < k)
25+
26+
return countArr
27+
}

0 commit comments

Comments
 (0)