https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
접근 방법
소수는 1과 자신 외의 약수는 가지지 않는 1 보다 큰 자연수이다.
처음에는 시간 복잡도가 O(N^2)인 완전 탐색을 썼는데 큰 수가 입력되자 시간이 초과됐다.
해결책을 알아보던 중 시간 복잡도가 O(Nlog(logN))인 에라토스테네스의 체 소수 판별 알고리즘을 접하게 됐다.
에라토스테네스의 체 (동영상) | 소수 판별법 | Khan Academy
수학, 예술, 컴퓨터 프로그래밍, 경제, 물리학, 화학, 생물학, 의학, 금융, 역사 등을 무료로 학습해 보세요. 칸아카데미는 어디에서나 누구에게나 세계 최고의 무료 교육을 제공하는 미션을 가진
ko.khanacademy.org
DP처럼 하나의 check 배열을 만들고
2부터 check 되지 않은 수의 배수들을 check 하며 제거해 나가는 방식이다.
이때 시작 값을 제거해서는 안 된다. 그래서 다음 for문은 이전 for문 값의 2 배수부터 반복 계산한다.
이후 check 되지 않은 수들을 탐색하며 셌다.
속도가 빠른 대신 메모리 공간이 꽤 필요했다.
소스 코드
import java.util.*;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int t=1; t<=T; t++) {
int D = sc.nextInt();
int N = sc.nextInt();
int L = sc.nextInt();
int cnt = 0;
int[] check = new int[L+1];
for(int i=2; i<=L; i++) {
if(check[i] == 1) continue;
for(int j=i*2; j<=L; j+=i) {
check[j] = 1;
}
}
for(int i=N; i<=L; i++) {
if(i == 1) continue;
if(check[i] == 0 && (i+"").contains(D+""))
cnt += 1;
}
System.out.println("#" + t + " " + cnt);
}
}
}
'코테 > 자바' 카테고리의 다른 글
[SWEA] 6190. 정곤이의 단조 증가하는 수 (0) | 2023.05.21 |
---|---|
[SWEA] 1225. 암호생성 (0) | 2023.05.21 |
[BOJ] 11725. 트리의 부모 찾기 (0) | 2023.05.18 |
[BOJ] 1260. DFS와 BFS (0) | 2023.05.18 |
[BOJ] 2606. 바이러스 (0) | 2023.05.18 |