Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 Array Q06_뒤집은 소수 본문
728x90
설명
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 10023 2 73 2 3
코드
해설 코드
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+" "); } } }
풀이 및 정리
문제 풀이 순서를 정리해보면
1. n 정수 입력 후 n개만큼의 반복문 작성 후 int []배열 입력
2. int[] 배열의 각각의 인덱스를 뒤집기
3. 각각의 인덱스가 소수이면 ArrayList<Integer>에 추가
4. 출력
이런 식으로 정리할 수 있다.
수를 뒤집는 방법은 여러 가지가 있겠지만 해설과 같은 코드로 할 수 있다.
int tmp = arr[i]; int res = 0; while(tmp > 0) { int t = tmp % 10; res = res*10 + t; tmp /= 10; }
예를 들어 arr[i]대신 348이란 숫자를 tmp에 대입시켜보면
while문에서 348 % 10 = 8로 int t = 8
res = 0 * 10 + 8 => res = 8
tmp = 348 / 10 => tmp = 34
---------------------------------------------
다시 while문 진행
int t = 34 % 10 => int t = 4
res = 8 * 10 + 4 => res = 84
tmp = 34 / 10 => tmp = 3
---------------------------------------------
다시 while문 진행
int t = int 3 % 10 => int t = 3
res = 84 * 10 + 3 => res = 843
tmp = 3 / 10 => tmp = 0
---------------------------------------------
while문 종료
=> tmp = 348 값이res에 뒤집어진 상태로 대입 res = 843
num 임의의 수 소수인지 판별하는 방법
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; }
먼저 1은 소수가 아니다.
for문을 통해 i=2부터 i <num까지 i++로 작성한다.
그래고 if문에 조건으로 num을 i로 나눠 나머지가 0이 되면 return false;
왜냐하면 소수는 1과 자기 자신으로 나눠지는 수이기 때문에 1에서 num-1까지 사이의 숫자로 나눠지면 안 된다
728x90
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 Array Q08_등수구하기 (0) | 2022.02.13 |
---|---|
자바 알고리즘 문제 풀이 Array Q07_점수계산 (0) | 2022.02.13 |
자바 알고리즘 문제 풀이 Array Q05_소수(에라토스테네스 체) (0) | 2022.02.12 |
자바 알고리즘 문제 풀이 Array Q04_피보나치 수열 (0) | 2022.02.10 |
자바 알고리즘 문제 풀이 Array Q03_가위 바위 보 (0) | 2022.02.09 |
Comments