File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ *@link https://leetcode.com/problems/house-robber-ii/description/
3
+ *
4
+ * ์ ๊ทผ ๋ฐฉ๋ฒ :
5
+ * - DP๋ฅผ ํ์ฉํด์ ํ์ฌ ์์น๊น์ง์ ์ต๋๊ฐ์ ์
๋ฐ์ดํธ
6
+ * - ์ํ ๊ตฌ์กฐ๋ก ์ฒซ ๋ฒ์งธ ์ง๊ณผ ๋ง์ง๋ง ์ง์ด ๋๋ค ํฌํจ๋ ์ ์๊ธฐ ๋๋ฌธ์, ์ฒซ ๋ฒ์งธ ์ง๋ง ํฌํจํ๋ ๊ฒฝ์ฐ์ ์ฒซ ๋ฒ์งธ ์ง์ ์ ์ธํ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋ ์ ๊ณ์ฐํ๊ณ ์ต๋๊ฐ ๋น๊ต
7
+ *
8
+ * ์๊ฐ๋ณต์ก๋ : O(n)
9
+ * - n = numbs ๋ฐฐ์ด์ ๊ธธ์ด, n๋ฒ ๋ฐ๋ณตํ๋ฉด์ ์ต๋๊ฐ ๊ณ์ฐ
10
+ *
11
+ * ๊ณต๊ฐ๋ณต์ก๋ : O(1)
12
+ * - dp ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋์ ๊ณ ์ ๋ ๋ฐฐ์ด(prev, doublePrev)์ ์ฌ์ฉ
13
+ */
14
+ const calculateMaxMoney = ( houses : number [ ] ) => {
15
+ let prev = 0 ;
16
+ let doublePrev = 0 ;
17
+
18
+ for ( let i = 0 ; i < houses . length ; i ++ ) {
19
+ const current = Math . max ( prev , doublePrev + houses [ i ] ) ;
20
+
21
+ doublePrev = prev ;
22
+ prev = current ;
23
+ }
24
+
25
+ return prev ;
26
+ } ;
27
+
28
+ function rob ( nums : number [ ] ) : number {
29
+ if ( nums . length === 1 ) return nums [ 0 ] ;
30
+ if ( nums . length === 2 ) return Math . max ( nums [ 0 ] , nums [ 1 ] ) ;
31
+
32
+ const robWithFirstHouse = calculateMaxMoney ( nums . slice ( 0 , nums . length - 1 ) ) ;
33
+ const robWithoutFirstHouse = calculateMaxMoney ( nums . slice ( 1 , nums . length ) ) ;
34
+
35
+ return Math . max ( robWithFirstHouse , robWithoutFirstHouse ) ;
36
+ }
You canโt perform that action at this time.
0 commit comments