/* 유한소수 판별하기
* 소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다.
* 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다.
*
* 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.
* 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
* 두 정수 a와 b가 매개변수로 주어질 때,
* a/b가 유한소수이면 1을, 무한소수라면 2를 return
*
* a b result
* 7 20 1 분모 20의 소인수가 2, 5이기 때문에 유한소수
* 11 22 1 분모 2는 소인수가 2 뿐이기 때문에 유한소수
* 12 21 2 분모 7은 소인수가 7 이므로 무한소수
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import java.util.*; public class programmer_0_89 { static int a1 = 1; static int b1 = 30; static int a2 = 11; static int b2 = 22; static int a3 = 12; static int b3 = 21; public int solution(int a, int b) { int answer = 1; if(a == 0 || b == 0) return answer; int min = a > b ? b : a; int val = 0; for(int i = 1; i <= min; i++){ //최대공약수 if(a % i == 0 && b % i == 0){ val = i; } } b = b / val; //기약분수 List<Integer> ar = new ArrayList<>(); for(int i = 2; i <= b; i++){ if(b % i == 0) ar.add(i); } for(int k : ar) System.out.print(k + ","); System.out.println(""); for(int i : ar){ System.out.println(i + " / " + (i%2) + " / " + (i%5) + " / " + (i % 2 != 0 && i % 5 != 0)); if(i % 2 != 0 && i % 5 != 0) answer = 2; } return answer; } public static void main(String args[]){ programmer_0_89 t = new programmer_0_89(); System.out.println("---------------------------------------"); System.out.println("result = " + t.solution(a1,b1)); System.out.println("---------------------------------------"); // System.out.println("result2 = " + t.solution(a2,b2)); // System.out.println("---------------------------------------"); } } | cs |