Skip to content

Commit cf7dbbe

Browse files
committed
feat(soobing): week14 > house-robber
1 parent 4789e28 commit cf7dbbe

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* 문제 μ„€λͺ…
3+
* - μ£Όμ–΄μ§„ λ°°μ—΄μ˜ μ‹œμž‘κ³Ό 끝이 μ—°κ²°λ˜μ–΄ μžˆλŠ” μ›ν˜•μ΄λΌκ³  ν•  κ²½μš°μ—, μ΄μ›ƒν•˜λŠ” 집은 ν„Έ 수 μ—†κ³  μ΅œλŒ€λ‘œ ν„Έ 수 μžˆλŠ” λˆμ„ κ΅¬ν•˜λŠ” 문제
4+
*
5+
* 아이디어
6+
* 1) 동적 κ³„νšλ²•(Dynamic Programming) ν™œμš©
7+
* - μ›ν˜• κ΅¬μ‘°μ΄λ―€λ‘œ 첫번째 μ§‘κ³Ό λ§ˆμ§€λ§‰μ§‘μ€ λ™μ‹œμ— ν„Έ 수 μ—†μŒ
8+
* - λ”°λΌμ„œ 두 κ°€μ§€ 경우둜 λ‚˜λˆ„μ–΄ κ³„μ‚°ν•˜κ³ , 두 κ²°κ³Ό 쀑 더 큰 값을 λ°˜ν™˜
9+
* 2) μ„ ν˜• 배열에 λŒ€ν•œ μ΅œλŒ€ κΈˆμ•‘ 계산
10+
* - λ§€ μˆœνšŒλ§ˆλ‹€ ν˜„μž¬ 집을 ν„Έ 경우(prev2 + num)와 ν„Έμ§€ μ•Šμ„ 경우(prev1) 쀑 큰 값을 선택
11+
* - μ΅œμ’…μ μœΌλ‘œ prev1에 μ΅œλŒ€κ°’μ΄ μ €μž₯
12+
*/
13+
function robLinear(nums: number[]) {
14+
let prev1 = 0;
15+
let prev2 = 0;
16+
17+
for (const num of nums) {
18+
const temp = prev1;
19+
prev1 = Math.max(prev2 + num, prev1);
20+
prev2 = temp;
21+
}
22+
23+
return prev1;
24+
}
25+
26+
function rob(nums: number[]): number {
27+
if (nums.length === 1) return nums[0];
28+
if (nums.length === 2) return Math.max(nums[0], nums[1]);
29+
30+
const temp1 = robLinear(nums.slice(0, nums.length - 1));
31+
const temp2 = robLinear(nums.slice(1));
32+
33+
return Math.max(temp1, temp2);
34+
}

0 commit comments

Comments
Β (0)