[Level2]소수 찾기
by EastGlow
문제
numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.)
10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
풀이 1
class NumOfPrime {
int numberOfPrime(int n) {
int result = 0;
boolean flag = false;
// 함수를 완성하세요.
if(n>3){
result = 2;
for(int i=4; i<=n; ++i){
flag = false;
for(int j=2; j<i; j++){
if(i%j == 0) flag = true;
}
if(!flag) result++;
}
}else{
result = n-1;
}
return result;
}
public static void main(String[] args) {
NumOfPrime prime = new NumOfPrime();
System.out.println( prime.numberOfPrime(10) );
}
}
풀고나서 다른 사람들의 풀이를 보니 내가 너무 어렵게 생각해서 풀었나 싶다. 소수가 나오지 않는 수의 범위는 4부터라서 처음 if문의 범위를 n>3으로 잡았다. 즉, 4 이상의 수가 들어오면 이중 for문을 통해 소수가 맞는지 아닌지 판별하여 result에 +1씩 해주는 방식이다. 4 미만의 수가 들어오면 그 수 -1을 한 것이 result가 된다.
풀이 2
class NumOfPrime {
int numberOfPrime(int n) {
int result = 0;
for(int i=2; i<=n; i++){
for(int j=2; j<=i; j++){
if(j == i){
++result;
} else if(i%j == 0){
break;
}
}
}
return result;
}
public static void main(String[] args) {
NumOfPrime prime = new NumOfPrime();
System.out.println( prime.numberOfPrime(10) );
}
}
애초에 그냥 1이 소수가 아니기 때문에 2부터 범위를 잡아서 시작해도 되는데 나는 너무 세부적으로 나누려고 한 것 같다. 풀이2처럼 푸는 것이 정석.
Subscribe via RSS