알고리즘

[프로그래머스, 자바] 유한소수 판별하기

hminor 2024. 3. 20. 10:23

풀이

  • 우선 기약분수와 소인수에 대한 정의를 한 번 하고 가자면
  • 기약분수란? 분자와 분모의 공약수가 1로만 이루어져 있는 분수.
  • 소인수란? 주어진 자연수를나누어 떠러뜨리는 약수 중 소수(1)인 약수이기에
  • 해당 문제는 우선 a와 b를 기약분수로 만드는 것부터 접근을 했다.
  • 그래서 s가 e보다 커지기 전까지 while문을 돌렸고 의미 없이 반복하기 보단
  • 마지막을 a로 지정하고 a가 줄어들면 e 또한 함께 줄여 시간을 단축하고자 했으며
  • 이후 분모가 2와 5로만 나누어져서 현재 상태가 1일 경우인지 아닌지에 대한 판별하여 해결.

 

class Solution {
    public int solution(int a, int b) {
        int s = 2;
        int e = a;
        while (s <= e) {
            if (a%s==0 && b%s==0) {
                a /= s;
                b /= s;
                e = a;
            } s++;
        }

        boolean state = true;
        while (true) {
            if (b%2==0) b/=2;
            else if (b%5==0) b/=5;
            else {
                state = false;
                break;
            }
        }

        return (b==1)?1:2;
    }
}