소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다. 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다. 두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.
import java.util.ArrayList;
import java.util.List;
class Solution {
    public int solution(int a, int b) {
        int answer = 1;
        int[] test=new int[2];
        test[0]=a; test[1]=b;
        test=divideTwo(test);
        boolean pass=true;
        for(int i=2; i<=test[1];i++){
            if(test[1]%i==0){
                if(i%2 !=0 & i%5!=0){
                    answer=2;
                }
            }
        }
        return answer;
    }
    public int[] divideTwo(int[] arr){
        boolean pass=true;
        while(pass){
            pass=false;
            for(int i=2; i<=Math.max(arr[0],arr[1]); i++){
                if(arr[0]%i==0 & arr[1]%i==0){
                    arr[0]/=i;arr[1]/=i;
                    pass=true;
                }
            }
        }
        return arr;
    }
}
이번에도 전에 못풀었던거를 풀어보았다.
전에는 뭔가 다 약수를 구해서 풀어볼려했는데
그렇게 안하고 이번엔 분모와 분자를 공통된 약수로 나눠줘서
기약분수 형태로 만드는 함수를 만들어서 풀어주었다.
기약분수로 만들어준뒤 분모만 이제 약수 중에 2와 5의 배수만 있는지
판별해주어서 답을 구해주었다.!!!!!!!!
'자바 알고리즘 문제' 카테고리의 다른 글
| 최빈값 구하기 (0) | 2024.05.10 | 
|---|---|
| 다항식 더하기 (0) | 2024.05.08 | 
| 저주의 숫자 3 (0) | 2024.05.03 | 
| 무작위로 k개의 수 뽑기 (0) | 2024.05.02 | 
| 왼쪽 오른쪽 (1) | 2024.05.01 |