문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력
4
1 3 5 7
예제 출력
3
풀이
1. 판별해야 할 수를 N이라고 할 때 N%1 N%2 … N%(N-1) 확인하기
아무 생각 없이 썼던 방법으로 굉장히 비효율적이다.
그 이유는 2번에서 설명하겠다.
2. N의 제곱근까지 확인하기
서칭하기 전까지 이런 방법이 있다고 생각도 못 했다. 역시 나이가 들면서 머리도 굳는건가 ㅠ ㅠ
N = A*B라고 할 때, A나 B 둘 중 하나는 무조건 N과 같거나 작기 때문에 N의 제곱근까지만 확인해보면 소수인지 판별이 가능하다.
예를 들어 N = 29라고 하면 제곱근은 5.xx이다.
2, 3, 4, 5의 배수인지만 확인하면 된다는 뜻이다.
코드(1번)
124 ms, 14080 KB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int count = 0;
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
int result = 0;
if(num==1) continue;
if(num==2) {
count++;
continue;
}
for(int j=2; j<num; j++) {
if(num%j==0) result = 1;
}
if(result==0) count++;
}
System.out.println(count);
}
}
코드(2번)
128 ms, 14140 KB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int count = 0;
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
if(isPrime(num)==true) count++;
}
System.out.println(count);
}
static boolean isPrime(int num) {
if(num==1) return false;
if(num==2||num==3) return true;
for(int i=2; i<=Math.sqrt(num); i++) {
if(num%i==0) return false;
}
return true;
}
}
'Problem Solving' 카테고리의 다른 글
[Java] 백준 9020. 골드바흐의 추측 (0) | 2023.03.07 |
---|---|
[Java] 백준 25206. 너의 평점은 (0) | 2023.03.07 |
[Java] 백준 10250. ACM 호텔 (0) | 2023.02.24 |
[Java] 백준 2839. 설탕 배달 (0) | 2023.02.24 |
[Java] SW Expert. 백만 장자 프로젝트 (0) | 2023.02.21 |
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력
4
1 3 5 7
예제 출력
3
풀이
1. 판별해야 할 수를 N이라고 할 때 N%1 N%2 … N%(N-1) 확인하기
아무 생각 없이 썼던 방법으로 굉장히 비효율적이다.
그 이유는 2번에서 설명하겠다.
2. N의 제곱근까지 확인하기
서칭하기 전까지 이런 방법이 있다고 생각도 못 했다. 역시 나이가 들면서 머리도 굳는건가 ㅠ ㅠ
N = A*B라고 할 때, A나 B 둘 중 하나는 무조건 N과 같거나 작기 때문에 N의 제곱근까지만 확인해보면 소수인지 판별이 가능하다.
예를 들어 N = 29라고 하면 제곱근은 5.xx이다.
2, 3, 4, 5의 배수인지만 확인하면 된다는 뜻이다.
코드(1번)
124 ms, 14080 KB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int count = 0;
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
int result = 0;
if(num==1) continue;
if(num==2) {
count++;
continue;
}
for(int j=2; j<num; j++) {
if(num%j==0) result = 1;
}
if(result==0) count++;
}
System.out.println(count);
}
}
코드(2번)
128 ms, 14140 KB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int count = 0;
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
if(isPrime(num)==true) count++;
}
System.out.println(count);
}
static boolean isPrime(int num) {
if(num==1) return false;
if(num==2||num==3) return true;
for(int i=2; i<=Math.sqrt(num); i++) {
if(num%i==0) return false;
}
return true;
}
}
'Problem Solving' 카테고리의 다른 글
[Java] 백준 9020. 골드바흐의 추측 (0) | 2023.03.07 |
---|---|
[Java] 백준 25206. 너의 평점은 (0) | 2023.03.07 |
[Java] 백준 10250. ACM 호텔 (0) | 2023.02.24 |
[Java] 백준 2839. 설탕 배달 (0) | 2023.02.24 |
[Java] SW Expert. 백만 장자 프로젝트 (0) | 2023.02.21 |