Skip to content

Commit b5a47f6

Browse files
committed
feat(2nd): Upload house-robber
1 parent c350b93 commit b5a47f6

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

β€Žhouse-robber/mike2ox.tsβ€Ž

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
/**
22
* Source: https://leetcode.com/problems/house-robber/
3-
* 풀이방법: DPλ₯Ό μ΄μš©ν•˜μ—¬ 집을 ν„Έ λ•Œ μ΅œλŒ€κ°’μ„ ꡬ함
4-
* μ‹œκ°„λ³΅μž‘λ„: O(n)
5-
* κ³΅κ°„λ³΅μž‘λ„: O(n)
6-
*
7-
* μƒκ°λ‚˜λŠ” 풀이방법
3+
* μš”μ : μΈμ ‘ν•œ 집을 λ°©λ¬Έν•˜μ§€ μ•Šκ³  ν›”μΉ  수 μžˆλŠ” μ΅œλŒ€ κΈˆμ•‘μ„ 계산
4+
* 풀이 μ‹œκ°„: 40λΆ„
5+
* 풀이방법: DPλ₯Ό μ‚¬μš©ν•˜μ—¬ 졜적의 해결책을 ꡬ함
6+
* μ‹œκ°„λ³΅μž‘λ„: O(n) - 배열을 ν•œ 번만 순회
7+
* κ³΅κ°„λ³΅μž‘λ„: O(1) - μƒμˆ˜ κ³΅κ°„λ§Œ μ‚¬μš© (μ΅œμ ν™” ν›„)
88
*/
99
function rob(nums: number[]): number {
10-
if (nums.length === 0) return 0;
11-
if (nums.length === 1) return nums[0];
12-
if (nums.length === 2) return Math.max(nums[0], nums[1]);
10+
// μ—£μ§€ μΌ€μ΄μŠ€ 처리
11+
const n = nums.length;
12+
if (n === 0) return 0;
13+
if (n === 1) return nums[0];
1314

14-
let prev = nums[0];
15-
let maxResult = Math.max(nums[0], nums[1]);
16-
let current = 0;
15+
// 곡간 μ΅œμ ν™”: 전체 dp λ°°μ—΄ λŒ€μ‹  두 개의 λ³€μˆ˜λ§Œ μ‚¬μš©
16+
let prevTwo = nums[0]; // dp[i-2]
17+
let prevOne = Math.max(nums[0], nums[1]); // dp[i-1]
1718

18-
// 남은 집을 μˆœνšŒν•˜λ©΄μ„œ μ΅œλŒ€κ°’μ„ ꡬ함
19-
for (let i = 2; i < nums.length; i++) {
20-
current = Math.max(maxResult, prev + nums[i]);
21-
prev = maxResult;
22-
maxResult = current;
19+
// i=2λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 졜적의 κ°’ 계산
20+
for (let i = 2; i < n; i++) {
21+
const current = Math.max(
22+
prevOne, // ν˜„μž¬ 집을 κ±΄λ„ˆλ›°λŠ” 경우
23+
prevTwo + nums[i] // ν˜„μž¬ 집을 ν„Έκ³  i-2 μœ„μΉ˜κΉŒμ§€μ˜ μ΅œμ ν•΄λ₯Ό λ”ν•˜λŠ” 경우
24+
);
25+
26+
// λ‹€μŒ λ°˜λ³΅μ„ μœ„ν•΄ κ°’ μ—…λ°μ΄νŠΈ
27+
prevTwo = prevOne;
28+
prevOne = current;
2329
}
24-
return maxResult;
30+
31+
return prevOne;
2532
}

0 commit comments

Comments
Β (0)