@@ -14,23 +14,45 @@ public class Dice {
1414
1515 @ Test
1616 public void test () {
17- assertThat (calcDiceCase (3 ), is (4 ));
18- assertThat (calcDiceCase (4 ), is (8 ));
19- assertThat (calcDiceCase (5 ), is (16 ));
20- assertThat (calcDiceCase (6 ), is (32 ));
21- assertThat (calcDiceCase (7 ), is (63 ));
22- assertThat (calcDiceCase (8 ), is (125 ));
17+ assertThat (calcDiceCase1 (3 ), is (4 ));
18+ assertThat (calcDiceCase1 (4 ), is (8 ));
19+ assertThat (calcDiceCase1 (5 ), is (16 ));
20+ assertThat (calcDiceCase1 (6 ), is (32 ));
21+ assertThat (calcDiceCase1 (7 ), is (63 ));
22+ assertThat (calcDiceCase1 (8 ), is (125 ));
23+ assertThat (calcDiceCase1 (3 ), is (4 ));
24+
25+ assertThat (calcDiceCase2 (4 ), is (8 ));
26+ assertThat (calcDiceCase2 (5 ), is (16 ));
27+ assertThat (calcDiceCase2 (6 ), is (32 ));
28+ assertThat (calcDiceCase2 (7 ), is (63 ));
29+ assertThat (calcDiceCase2 (8 ), is (125 ));
2330 }
2431
2532 private int dp [] = new int [1000 ];
26- public int calcDiceCase (int n ) {
33+ /**
34+ * 메모이제이션을 사용하지 않은 경우
35+ * 단점 : 숫자가 커질수록 느려진다.
36+ */
37+ public int calcDiceCase1 (int n ) {
38+ if (n < 0 ) return 0 ;
39+ if (n == 0 ) return 1 ;
40+ return calcDiceCase1 (n - 1 ) + calcDiceCase1 (n - 2 ) +
41+ calcDiceCase1 (n - 3 ) + calcDiceCase1 (n - 4 ) +
42+ calcDiceCase1 (n - 5 ) + calcDiceCase1 (n - 6 );
43+ }
44+ /**
45+ * 메모이제이션을 사용하는 경우
46+ * 장점 : 속도가 빠르다.
47+ */
48+ public int calcDiceCase2 (int n ) {
2749 if (n < 0 ) return 0 ;
2850 if (n == 0 ) return 1 ;
2951 int result = 0 ;
3052 for (int i = 1 ; i <=6 ; i ++){
31- if (i >= 0 ){
53+ if (n - i >= 0 ){
3254 if (dp [n - i ] == 0 ){
33- dp [n - i ] = calcDiceCase (n - i );
55+ dp [n - i ] = calcDiceCase2 (n - i );
3456 }
3557 result += dp [n - i ];
3658 }
0 commit comments