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 나온다