https://www.acmicpc.net/problem/1527
알고리즘 분류
- 브루트포스 알고리즘
풀이
처음엔 완전탐색으로 하나씩 String으로 변환 후 체크했다.
하지만 메모리 초과가 발생하였고, 재귀 호출을 사용해 문제에 접근했다.
핵심 로직이다.
매개변수로 받은 n을
어차피 한자리씩 늘어나니 10을 곱하고 7, 4를 더했다. ( 7 -> 77 or 74 )
왜냐하면 7와 4만 필요할 뿐 나머지는 필요가 없기 때문이다.
재귀호출을 빠져나오는 조건문은 b보다 크면 빠져나오도록 설정했다.
public static void calculate(long n){
if(n > b) return;
if(a <= n){cnt ++;}
long x = n * 10 + 7;
long y = n * 10 + 4;
calculate(x);
calculate(y);
}
아래는 전체 정답 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int a, b, cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
calculate(7);
calculate(4);
System.out.println(cnt);
}
public static void calculate(long n){
if(n > b) return;
if(a <= n) cnt ++;
long x = n * 10 + 7;
long y = n * 10 + 4;
calculate(x);
calculate(y);
}
}
'BOJ, Programmers' 카테고리의 다른 글
[Java] 백준 14501 (퇴사) 자바 문제풀이 (0) | 2024.04.25 |
---|---|
[Java] 백준 2535 (아시아 정보올림피아드) 자바 문제 풀이 (1) | 2024.04.18 |
[Java] 백준 2075 (N번째 큰 수) 자바 문제 풀이 (1) | 2024.04.15 |
[Java] 백준 1312 번 (소수) 문제 풀이 (0) | 2024.04.10 |
[Java] 백준 1543번 (문서 검색) 자바 문제 풀이 (0) | 2024.04.08 |