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