풀이는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include <iostream>
using namespace std;
int sugar(int);
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
cout << sugar(n) << '\n';
return 0;
}
int sugar(int a){
if( a == 3 || a == 5){
return 1;
}else if ( a == 4){
return -1;
}else{
switch (a % 5){
case 0:
return a / 5;
break;
case 1:
return (a-6)/5 + 2;
break;
case 2:
if( a-12 >= 0 ) return (a-12)/5+4;
else return -1;
break;
case 3:
return (a-3)/5 + 1;
break;
case 4:
return (a-9)/5 + 3;
break;
}
}
return 0;
}
// int sugar(int a){
// if(a == 3 || a == 5){
// return 1;
// }else if (a < 5){
// return -1;
// }else{
// int b = sugar(a-5);
// int c = sugar(a-3);
// if(b > 0){
// return b + 1;
// }else if(c > 0){
// return c + 1;
// }else{
// return -1;
// }
// }
// }
|
cs |
시행착오:
처음에 문제를 풀었을 때는 시간초과가 떴는데, 이유는 아래의 주석처리된 부분과 같이 recursive 함수를 썼기 때문이다. 재귀함수는 해답 자체를 찾는데는 유용할 때가 많지만 시간이 대체로 iterative 과정보다 더 오래 걸리는 것이 알려져있다. 확실하지 않지만 재귀함수를 사용한 것 자체가 문제였을 것 같다. 따라서 문제를 잘 분석해보니 5로 나눈 나머지를 기준으로 수를 분류한다면 훨씬 더 간단하게 답을 구할 수 있음을 깨달았다. 그렇게 식을 위의 sugar 함수처럼 고쳐서 제출하니 맞았다고 떴다.
이 한 문제를 풀었더니 랭크가 2천등을 올라가는 걸 보니 이제 겨우 시작이다 생각이 들면서도 뭔가 동기부여가 되는 것 같다. 나는 항상 중고등학교 때부터 경쟁을 통해 성취감과 열정을 찾았던 것 같기도 하다. 열심히 계속 해보자!!! 빠팅 ㅎㅎ
반응형
'Baekjoon(C++)' 카테고리의 다른 글
[C++]백준 알고리즘 10950번 (0) | 2021.07.03 |
---|---|
[C++]백준 알고리즘 13458번 (0) | 2021.07.02 |
[C++]백준 알고리즘 15719번 (0) | 2021.06.28 |
[C++]백준 알고리즘 1269번 (0) | 2021.06.27 |
Hello World! (0) | 2020.05.12 |