@@ -10,10 +10,6 @@ using namespace std;
10
10
2.2. 2로 한번만 나눌 수 있는 경우 -> -1을 해서 3으로 나눌 수 있으면 그렇게 가고, 아니면 2로 나눈다.
11
11
3. 1, 2에 포함되지 않는경우 -1을 한다.
12
12
13
- CLASS Pair
14
- 1. number
15
- 2. count
16
-
17
13
vector<Pair> memo
18
14
19
15
int recur_fuc
@@ -32,47 +28,33 @@ int recur_fuc
32
28
1. GET count from recursive func
33
29
2. PRINT recursive func
34
30
*/
35
- struct Pair {
36
- int number;
37
- int count;
38
- };
39
-
40
- vector<Pair*> memo;
41
-
42
- int search_memo (int input) {
43
- if (!memo.empty ())
44
- for (int i = memo.size () - 1 ; i >= 0 ; --i)
45
- if (memo[i]->number == input) {
46
- return memo[i]->count ;
47
- }
48
- return 1 ;
49
- }
31
+ int memo[1000001 ]
32
+ ;
50
33
51
- int making_one_calculating_count (int input) {
34
+ int main_func (int input) {
52
35
if (input == 1 )
53
36
return 0 ;
54
37
55
- int count = search_memo (input);
56
- if (count != 1 )
38
+ int count = memo[input];
39
+ if (count) {
40
+ // cout << input << " : " << count << '\n';
57
41
return count;
42
+ }
58
43
59
- int adder;
60
- if ((input % 3 ) == 0 )
61
- adder = making_one_calculating_count (input / 3 );
62
- if ((input % 2 ) == 0 ) {
63
- int temp = making_one_calculating_count (input / 2 );
44
+ int adder = 1000000 ;
45
+ if (! (input % 3 ))
46
+ adder = main_func (input / 3 );
47
+ if (! (input % 2 )) {
48
+ int temp = main_func (input / 2 );
64
49
adder = ((temp < adder) ? temp : adder);
65
50
}
66
- int temp = making_one_calculating_count (input - 1 );
51
+ int temp = main_func (input - 1 );
67
52
adder = ((temp < adder) ? temp : adder);
68
53
69
- count + = adder;
54
+ count = adder + 1 ;
70
55
71
- Pair* tempPair = new Pair;
72
- tempPair->number = input;
73
- tempPair->count = count;
74
- memo.push_back (tempPair);
75
- cout << input << ' \n ' ;
56
+ memo[input] = count;
57
+ // cout << "memoed: memo[" << input << "] is: " << count << '\n';
76
58
return count;
77
59
}
78
60
@@ -82,8 +64,11 @@ int main() {
82
64
83
65
int input;
84
66
cin >> input;
85
- int count = making_one_calculating_count (input);
86
- cout << input;
87
- cout << endl << count;
67
+ int count = main_func (input);
68
+ cout << count << ' \n ' ;
69
+
70
+ // for (int i = 0; i <= input; ++i)
71
+ // cout << memo[i] << ' ';
72
+
88
73
return 0 ;
89
74
}
0 commit comments