알고리즘
[hackerRank] primChecker
91cm
2021. 2. 28. 19:48
문제
www.hackerrank.com/challenges/prime-checker/problem
접근방법
- 소수를 판별해 내는 문제이다
- 1보다 크고, 1과 자신외의 약수를 가지지 않는 수 ex) 2,3,5,7..
- 사람들이 푼걸 보니, BigInteger.valueOf(number).isProbablePrime() 을 많이 쓰기도 하는것 같다 .
package com.cm;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
/**
* https://www.hackerrank.com/challenges/prime-checker/problem
*
* 자바 리플렉션(Reflection)이란 컴파일된 자바 코드에서 역으로 클래스를 불러서 메소드(Method) 및 변수(Field)를 구해오는 방법으로
* 클래스를 동적 로딩하여 사용할때 많이 사용되고 디컴파일할때에도 자주 사용되는 기법이다.
*
*/
public class PrimeChecker {
class Prime{
public void checkPrime(int... n1) {
for(int n : n1){
if (isPrime(n)){
System.out.print(n+" ");
}
}
System.out.println("");
}
public boolean isPrime(int n){
boolean prime = true;
if(n<2){
return false;
}
for (int i = 2; i < n; i++) {
if (n % i == 0) { // 나누어 나머지 값이 떨어지면 소수 아님
prime = false;
break;
}
}
return prime;
}
}
public PrimeChecker() {
solution();
}
public void solution(){
try{
InputStream in = System.in;
BufferedReader br=new BufferedReader(new InputStreamReader(in));
int n1=Integer.parseInt(br.readLine());
int n2=Integer.parseInt(br.readLine());
int n3=Integer.parseInt(br.readLine());
int n4=Integer.parseInt(br.readLine());
int n5=Integer.parseInt(br.readLine());
Prime ob=new Prime();
ob.checkPrime(n1);
ob.checkPrime(n1,n2);
ob.checkPrime(n1,n2,n3);
ob.checkPrime(n1,n2,n3,n4,n5);
Method[] methods=Prime.class.getDeclaredMethods();
Set<String> set=new HashSet<>();
boolean overload=false;
for(int i=0;i<methods.length;i++)
{
if(set.contains(methods[i].getName()))
{
overload=true;
break;
}
set.add(methods[i].getName());
}
if(overload)
{
throw new Exception("Overloading not allowed");
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}