알고리즘

[Array(1,2차원 배열)] 피보나치 수열 & 소수(에라토스테네스 체) & 뒤집은 소수

날아 2023. 3. 23. 20:43

Q. 피보나치 수열을 출력한다.  피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다. 

입력은 피보나치 수열의 총 항의 수 이다. 

 

Class Main {
	public int[] solution(int n){
    	/*
    	int[] answer = new int[n];
        answer[0]=1;
        answer[1]=1;
        for(int i=2; i<n; i++) {
        	answer[i] = answer[i-2]+answer[i-1];
        }*/
        
        /*배열을 쓰지 않을 경우*/
        int a = 1;
        int b = 1; 
        int c;
        
        System.out.print(a+" "+b+" ");
        for(int i=2; i<n; i++){
        	c=a+b;
            System.out.print(c+" ");
            a = b;
            b = c;
        }
        return answer;
    }
    
    public static void main(String[] args){
    	Main T = new Main(); 
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt(); 
       
        for(int x : T.solution(n)){
        	System.out.print(x+" ");
        }
    }
}

 


Q.  자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하라

만약, 20이 입력되면 1부터 20까지의 소수는 2,3,5,7,11,13,17,19로 총 8개이다.

 

Class Main {
	public int[] solution(int n){
    	int answer = 0;
        int[] ch = new int[n+1];
        
        for(int i=2; i<=n: i++){
        	if(ch[i]==0){
            	answer++;
                for(int j=i; j<=n; j=j+i){ //j가 i의 배수만큼 증가해야하기 때문에 j+i로 해준다. 
                	ch[j]=1;
                }
            }
        }
        return answer;
    }
    
    public static void main(String[] args){
    	Main T = new Main(); 
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        
        System.out.println(T.solution(n));
    }
}

Q.  N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하시오 

단, 910을 뒤집을 경우 19로 숫자화 해야한다. 

 

Class Main {
	public boolean isPrime(int num){
    	if(num==1) return false;
        for(int i=2; i<num; i++){
        	if(num%i==0){
            	return false;
            }
        }
        return true;
    }
	public ArrayList<Integer> solution(int n, int[] arr){
    	ArrayList<Integer> answer = new ArrayList<>();
        
        for(int i=0; i<n; i++){
        	int tmp = arr[i];
            int res = 0;
            while(tmp>0){
            	int t = tmp%10;
                res = res*10+t;
                tmp = tmp/10;
            }
            if(isPrime(res)){
            	answer.add(res);
            }
        }
        return answer;		
    }
    
    public static void main(String[] args){
    	Main T = new Main(); 
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n; i++){
        	arr[i]=kb.nextInt();
        }
        for(int x : T.solution(n,arr)){
        	System.out.print(x+" ");
        }
        
    }
}