m n
이 첫 줄에 주어지면 m이상 n이하 소수 모두 출력하는 간단한 문제
소스코드1의 무게 (메모리, 시간) :
소스코드1 (Scanner 사용과 배열 이용한 출력) :
import java.util.*;
class Main {
public ArrayList<Integer> solution(int m, int n) {
ArrayList<Integer> answer = new ArrayList<>();
boolean prime[] = new boolean[n+1];
Arrays.fill(prime, true);
prime[0] = prime[1] = false;
for(int i=2; i*i<=n; i++) {
if (prime[i] == true) {
for(int j=i*i; j<=n; j+=i) {
prime[j] = false;
}
}
}
for(int i=m; i<=n; i++) {
if (prime[i] == true) answer.add(i);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
for(int x : T.solution(m, n)) {
System.out.println(x);
}
}
}
소스코드2의 무게 (메모리, 시간) :
소스코드2 (BufferedReader와 StringBuilder 사용) :
import java.util.StringTokenizer;
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
class Main {
public StringBuilder solution(int m, int n) {
StringBuilder answer = new StringBuilder();
boolean prime[] = new boolean[n+1];
Arrays.fill(prime, true);
prime[0] = prime[1] = false;
for(int i=2; i*i<=n; i++) {
if (prime[i] == true) {
for(int j=i*i; j<=n; j+=i) {
prime[j] = false;
}
}
}
for(int i=m; i<=n; i++) {
if (prime[i] == true) answer.append(i).append('\n');
}
return answer;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
System.out.println(T.solution(m, n));
}
}
+ 무서운 이야기
c++로 풀면 16ms 나온다
'Java 코딩테스트 공부 > Java 백준 문제풀이' 카테고리의 다른 글
자바 백준 1181번 문제 - 단어정렬 (0) | 2022.10.21 |
---|---|
자바 백준 2108번 문제 - 통계학 (0) | 2022.10.20 |
자바 백준 16472번 문제 - 고냥이 (0) | 2022.08.11 |
자바 백준 1016번 문제 - 제곱 ㄴㄴ 수 (0) | 2022.08.11 |
자바 백준 1644번 문제 - 소수의 연속합 (0) | 2022.08.11 |