728x90
반응형
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);
}
}
728x90
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.02 - Array] 08. 등수 구하기 (+ Arrays.sort와 fill) (0) | 2022.05.18 |
---|---|
[Ch.02 - Array] 07. 점수계산 (0) | 2022.05.18 |
[Ch.02 - Array] 05. 소수(에라토스테네스 체) # (0) | 2022.05.18 |
[Ch.02 - Array] 04. 피보나치 수열 (0) | 2022.05.17 |
[Ch.02 - Array] 03. 가위 바위 보 (0) | 2022.05.17 |