1527번 - 금민수의 개수
재귀함수를 통해서 A보다 크고 B보다 작은 수를 만들어내면서 정답을 체크해갔다.
만든 숫자 끝에 4 나 7을 추가하면서 , 위의 조건을 만들면 정답 개수를 하나씩 늘렸다.
depth >= 10 을 체크한 것은, 혹시 10억의 자릿수가 10개 이기 때문에, 그 수를 넘어가는 경우를 체크했다.
<정답 코드>
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 | #include<iostream> using namespace std; int ans = 0; void dfs(int lower,int upper,int depth,int num) { if (depth >= 10) { return ; } if (num > upper) { return ; } if (num >= lower) { ans += 1; } dfs(lower, upper, depth + 1, num * 10 + 4); dfs(lower, upper, depth + 1, num * 10 + 7); return ; } int main() { int A, B; scanf("%d %d", &A, &B); dfs(A,B,0,0) ; printf("%d\n", ans); return 0; } | cs |
반응형