1
+ /**
2
+ * ์ฒ์ ์ง๊ณผ ๋ ์ง์ ์ฐ๊ฒฐ๋์ด ์์.
3
+ * ์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ธ์ ํ ์ง์ ํธ์ง ์๊ณ ํ์น ์ ์๋ ์ต๋ ๊ธ์ก์ ๊ณ์ฐํ๋ ํจ์
4
+ *
5
+ * @param {number[] } nums - ๊ฐ ์ง์ ์๋ ๋์ ์์ ๋ํ๋ด๋ ๋ฐฐ์ด
6
+ * @returns {number } - ๊ฒฝ๋ณด๋ฅผ ์ธ๋ฆฌ์ง ์๊ณ ํ์น ์ ์๋ ์ต๋ ๊ธ์ก
7
+ *
8
+ * ์๊ฐ ๋ณต์ก๋: O(n)
9
+ * - ๋ชจ๋ ์ง์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธ
10
+ *
11
+ * ๊ณต๊ฐ ๋ณต์ก๋: O(1)
12
+ * - ์์ ๊ฐ์ ๋ณ์๋ง ์ฌ์ฉ
13
+ */
14
+ function rob ( nums : number [ ] ) : number {
15
+ const houses = nums . length ;
16
+
17
+ if ( houses === 1 ) return nums [ 0 ] ;
18
+
19
+ const robber = ( nums : number [ ] , start : number , end : number ) => {
20
+ let prevMax = 0 ; // ๋ฐ๋ก ์ด์ ์ง๊น์ง ํธ์ด์ ์ป์ ์ต๋ ๊ธ์ก
21
+ let currMax = 0 ; // ํ์ฌ ์ง๊น์ง ํธ์ด์ ์ป์ ์ต๋ ๊ธ์ก
22
+
23
+ // start๋ถํฐ end๊น์ง ๋ฐ๋ณตํ๋ฉฐ DP ์งํ
24
+ for ( let i = start ; i <= end ; i ++ ) {
25
+ // ํ์ฌ ์ง(i)์ ํธ ๊ฒฝ์ฐ์ ํธ์ง ์์ ๊ฒฝ์ฐ์ ์ต๋ ๊ธ์ก ๊ณ์ฐ
26
+ const temp = currMax ;
27
+ currMax = Math . max ( currMax , prevMax + nums [ i ] ) ;
28
+ prevMax = temp ;
29
+ }
30
+
31
+ return currMax ;
32
+ }
33
+
34
+
35
+ // ์ํ ๊ตฌ์กฐ์ด๋ฏ๋ก, ์ฒซ ๋ฒ์งธ ์ง์ ํธ ๊ฒฝ์ฐ์ ๋ง์ง๋ง ์ง์ ํธ ๊ฒฝ์ฐ๋ ๋์์ ๋ถ๊ฐ๋ฅ
36
+ // ๋ ๊ตฌ๊ฐ์ ๋ฐ๋ก ๊ณ์ฐํ๊ณ ์ต๋๊ฐ์ ๋ฐํ
37
+ const max1 = robber ( nums , 0 , houses - 2 ) ; // ์ฒซ ๋ฒ์งธ ์ง๋ถํฐ ๋ง์ง๋ง์์ ๋ ๋ฒ์งธ ์ง๊น์ง ๊ณ ๋ ค
38
+ const max2 = robber ( nums , 1 , houses - 1 ) ; // ๋ ๋ฒ์งธ ์ง๋ถํฐ ๋ง์ง๋ง ์ง๊น์ง ๊ณ ๋ ค
39
+
40
+ return Math . max ( max1 , max2 ) ;
41
+
42
+ } ;
0 commit comments