Skip to content

Commit 339053b

Browse files
committed
house-robber
1 parent 7c26233 commit 339053b

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

β€Žhouse-robber/JANGSEYEONG.jsβ€Ž

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* μ‹œκ°„λ³΅μž‘λ„: O(n) - 배열을 ν•œ 번만 순회
3+
* κ³΅κ°„λ³΅μž‘λ„: O(n) - 길이가 n+1인 DP λ°°μ—΄ μ‚¬μš©
4+
*
5+
* @param {number[]} nums
6+
* @return {number}
7+
*/
8+
var rob = function (nums) {
9+
// arr[i] = i번째 μ§‘λΆ€ν„° λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œ ν›”μΉ  수 μžˆλŠ” μ΅œλŒ€ κΈˆμ•‘
10+
const arr = new Array(nums.length + 1);
11+
12+
// μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ§‘(n+1번째)은 0, 점화식을 μœ„ν•œ κ³„μ‚°μš© κ³΅κ°„μž„
13+
arr[nums.length] = 0;
14+
15+
// λ§ˆμ§€λ§‰ μ§‘λ§Œ κ³ λ €ν•˜λ©΄ κ·Έ μ§‘μ˜ κΈˆμ•‘μ΄ μ΅œλŒ€κ°’ (이후 집듀은 μ—†μœΌλ‹ˆκΉŒ 0으둜 κ³„μ‚°ν•œ κ²°κ³Ό)
16+
arr[nums.length - 1] = nums[nums.length - 1];
17+
18+
// λ’€μ—μ„œλΆ€ν„° 계산
19+
for (let i = nums.length - 2; i >= 0; i--) {
20+
// i번째 μ§‘μ—μ„œμ˜ κ²°μ •:
21+
// 1. i번째 집을 ν„Έκ³  (i+2)번째 μ§‘λΆ€ν„° ν›”μΉ˜λŠ” 경우: nums[i] + arr[i+2]
22+
// 2. i번째 집을 ν„Έμ§€ μ•Šκ³  (i+1)번째 μ§‘λΆ€ν„° ν›”μΉ˜λŠ” 경우: arr[i+1]
23+
// 두 κ°€μ§€ 쀑 μ΅œλŒ€κ°’μ„ 선택
24+
arr[i] = Math.max(nums[i] + arr[i + 2], arr[i + 1]);
25+
}
26+
27+
// arr[0]은 0번째 μ§‘λΆ€ν„° κ³ λ €ν–ˆμ„ λ•Œ ν›”μΉ  수 μžˆλŠ” μ΅œλŒ€ κΈˆμ•‘
28+
return arr[0];
29+
};
30+
31+
/* 풀이 μ„€λͺ…:
32+
* 문제의 핡심: μΈμ ‘ν•œ 집은 μ—°μ†ν•΄μ„œ ν„Έ 수 없을 λ•Œ μ΅œλŒ€λ‘œ ν„Έ 수 μžˆλŠ” κΈˆμ•‘ μ°ΎκΈ°
33+
*
34+
* μ ‘κ·Ό 방식: λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
35+
*
36+
* 1. μƒνƒœ μ •μ˜:
37+
* - f(n) = n번째 μ§‘λΆ€ν„° λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€ κ³ λ €ν–ˆμ„ λ•Œ ν„Έ 수 μžˆλŠ” μ΅œλŒ€ κΈˆμ•‘
38+
*
39+
* 2. 점화식 λ„μΆœ:
40+
* - 각 μ§‘λ§ˆλ‹€ 두 κ°€μ§€ 선택이 있음:
41+
* 1) ν˜„μž¬ 집을 ν„ΈκΈ°: ν˜„μž¬ μ§‘μ˜ 돈 + 두 μ§‘ μ΄ν›„λΆ€ν„°μ˜ μ΅œλŒ€ κΈˆμ•‘
42+
* 2) ν˜„μž¬ 집을 ν„Έμ§€ μ•ŠκΈ°: λ‹€μŒ μ§‘λΆ€ν„°μ˜ μ΅œλŒ€ κΈˆμ•‘
43+
* - λ”°λΌμ„œ 점화식: f(n) = max(nums[n] + f(n+2), f(n+1))
44+
*
45+
* 3. 베이슀 μΌ€μ΄μŠ€:
46+
* - μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ§‘: f(n+1) = 0
47+
* - λ§ˆμ§€λ§‰ μ§‘: f(n) = nums[n]
48+
*
49+
* 4. 계산 λ°©ν–₯:
50+
* - λ’€μ—μ„œλΆ€ν„° μ•žμœΌλ‘œ 계산 (Bottom-up)
51+
* - λ§ˆμ§€λ§‰ μ§‘λΆ€ν„° μ‹œμž‘ν•΄μ„œ 첫 번째 μ§‘κΉŒμ§€ 각 μœ„μΉ˜μ—μ„œμ˜ μ΅œλŒ€ κΈˆμ•‘ 계산
52+
*
53+
* μ˜ˆμ‹œ [1,2,3,1]:
54+
* - f(4) = 0 (μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ§‘)
55+
* - f(3) = 1 (λ§ˆμ§€λ§‰ μ§‘)
56+
* - f(2) = max(3 + f(4), f(3)) = max(3 + 0, 1) = 3
57+
* - f(1) = max(2 + f(3), f(2)) = max(2 + 1, 3) = 3
58+
* - f(0) = max(1 + f(2), f(1)) = max(1 + 3, 3) = 4
59+
* - κ²°κ³Ό: 4 (졜적의 선택은 0λ²ˆμ§Έμ™€ 2번째 μ§‘ ν„ΈκΈ°)
60+
*/

0 commit comments

Comments
Β (0)