문제 설명
접근법
- 재귀방식으로 문제를 풀 수 있다는 걸 생각해내는게 문제의 핵심입니다.
A,B의 범위가 크기 때문에 O(N)으로는 문제를 풀 수 없습니다.
문자열로 값을 만들어가는 것보다는 숫자로 값을 만들어가는게 훨씬 효율적입니다.
정답
import java.util.*;
import java.io.*;
public class Main {
static int answer = 0;
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
recursion(0,A,B);
System.out.println(answer);
}
public static void recursion(long num, int A, int B) {
if(num >1_000_000_000L) return;
if(A <= num && num <= B) answer++;
recursion(10*num+4,A,B);
recursion(10*num+7,A,B);
}
}