본문 바로가기

Java/Java 알고리즘 인프런

[Ch.02 - Array] 06. 뒤집은 소수 (+ 숫자 뒤집기 : while, %10, /10)

반응형
6. 뒤집은 소수
 

설명

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

예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.

첫 자리부터의 연속된 0은 무시한다.

입력

첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.

각 자연수의 크기는 100,000를 넘지 않는다.

출력

첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

 

예시 입력 1 

9
32 55 62 20 250 370 200 30 100

예시 출력 1

23 2 73 2 3

 


import java.util.*;

public class Main {
	static Scanner kb = new Scanner(System.in);

	public void solution(int n) {
		int[] arr = new int[n];
		int answer = 0;
		String str = "";
		for (int i = 0; i < n; i++) {
			StringBuilder sb = new StringBuilder();
			arr[i] = kb.nextInt();
			sb.append(arr[i]);
			sb.reverse();
			str = sb.toString();
			answer = Integer.parseInt(str);
			
			if(isPrime(answer)) {
				System.out.print(answer+" ");
			}

		}

	}

	public boolean isPrime(int n2) {
		if (n2 == 1)
			return false;
		for (int i = 2; i < n2; i++) {
			if (n2 % i == 0)
				return false;

		}
		return true;

	}

	public static void main(String[] args) {
		Main T = new Main();
		int n = kb.nextInt();
		T.solution(n);
	}
}
import java.util.*;

public class Main {
	public boolean isPrime(int n) {
		int cnt = 0;
		for (int j = 1; j <= n; j++) {
			if (n % j == 0)
				cnt++;
			if (cnt > 2)
				return false;
		}
		if(cnt==2)
			return true;
		
		return false;

	}

	public ArrayList<Integer> solution(int n, int[] arr) {
		ArrayList<Integer> answer = new ArrayList<>();
		for (int i = 0; i < n; i++) {

			Main T = new Main();
			char[] array = Integer.toString(arr[i]).toCharArray();
			StringBuilder sb = new StringBuilder();
			for (char x : array) {
				sb.append(x);
			}
			if(T.isPrime(Integer.parseInt(sb.reverse().toString()))){
				answer.add(Integer.parseInt(sb.toString()));
			}

		}

		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 z : T.solution(n, arr))
			System.out.print(z + " ");

	}
}

 

 

 

import java.util.*;

public class Main {
	static boolean check(int n) {
		int count=0;
		for (int j = 1; j <= n; j++) {
			if (n % j == 0)
				count++;
			if (count == 3)
				continue;
		}
		if (count ==2)
			return true;
		return false;
	}

	static int reverse(int n) {
		String str = "";
		char[] arr = Integer.toString(n).toCharArray();
		for (int i = arr.length - 1; i >= 0; i--) {
			str += arr[i];
		}
		return Integer.parseInt(str);
	}

	public static void main(String[] args) {
		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 : solution(arr))
			System.out.print(x + " ");
	}

	static ArrayList<Integer> solution(int[] arr) {
		ArrayList<Integer> answer = new ArrayList<>();
		for (int i = 0; i < arr.length; i++) {
			if (check(reverse(arr[i])))
				answer.add(reverse(arr[i]));
		}
		// for(int x: answer) System.out.print(x+" ");
		return answer;
	}
}

 

+) 세련된 풀이

import java.util.*;

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 + " ");
		}
	}
}

 

 

#int형 뒤집는 방법

 

1. 10으로 나눈 후, 1의자리부터 채운다. -> 결과값에 10을 곱해, 10나눈값을 더하는 방식

int tmp = arr[i];
int res = 0;
while (tmp > 0) {
    int t = tmp % 10;
    res = res * 10 + t;
    tmp = tmp / 10;
}

 

2. char배열로 변환 후, 뒤에서 부터 하나씩 잘라서, 앞에 추가

static int reverse(int n) {
    String str = "";
    char[] arr = Integer.toString(n).toCharArray();
    for (int i = arr.length - 1; i >= 0; i--) {
        str += arr[i];
    }
    return Integer.parseInt(str);
}

 

#뒤집는 함수, 소수 체크 함수 만들어서 풀이

import java.util.*;
  
public class Main {
  //뒤집는 함수
  static int reverse(int n){
    String tmp = Integer.toString(n);
    StringBuilder sb = new StringBuilder();
    int answer= Integer.parseInt(sb.append(tmp).reverse().toString());
    return answer;
  }
  //소수 체크 함수
  static boolean check(int n){
    int cnt=0;
    for(int i=n-1;i>=2;i--){
      if(n%i==0) return false;
    }
    return true;
  }
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int n = in.nextInt();
    int[] arr =new int[n];
    for(int i=0;i<n;i++){
      arr[i]=in.nextInt();
    }
    solution(n,arr);
  }
  static void solution(int n, int[] arr){
    ArrayList<Integer> list = new ArrayList<>();
    for(int i=0;i<n;i++){
      int tmp=reverse(arr[i]);
      if(tmp>=2&&check(tmp)==true) list.add(tmp);
    }
    for(int x: list) System.out.print(x+" ");
  }
}

소수

: 1과 자기자신으로만 나누어지는 수

->단, 예외 :  1은 소수가 아니고, 2는 소수이다.

 

숫자 뒤집기

: int%10을 저장, int/10으로 바꿔서 int>0이면 반복

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    int[] arr= new int[n];
    for(int i=0;i<n;i++){
      int tmp=in.nextInt();
      if(check(reverse(tmp))) System.out.print(reverse(tmp)+" ");
    }
    
  }
  //소수 체크 함수
  private static boolean check(int tmp){
    if(tmp==2) return true;
    else if(tmp==1) return false;
    
    for(int i=tmp-1;i>=2;i--){
      if(tmp%i==0) return false;
    }
    return true;
  }
  //숫자 뒤집는 함수
  private static int reverse(int tmp){
    String answer="";
    while(tmp>0){
      answer+=Integer.toString(tmp%10);
      tmp=tmp/10;
    }
    //System.out.println(Integer.parseInt(answer));
    return Integer.parseInt(answer);
  }
}
반응형