Java 코딩테스트 공부/Java 백준 문제풀이
같은 정답 다른 무게 + 무서운 이야기
daramG
2022. 8. 16. 21:16
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 나온다
