본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.0

[프로그래머스 - JAVA] 유한소수 판별하기

by 코딩하는 흰둥이 2023. 3. 16.

이 놈의 수학....


입출력 예 설명

입출력 예 #1

  • 분수 7/20은 기약분수 입니다. 분모 20의 소인수가 2, 5 이기 때문에 유한소수입니다. 따라서 1을 return합니다.

 

입출력 예 #2

  • 분수 11/22는 기약분수로 나타내면 1/2 입니다. 분모 2는 소인수가 2 뿐이기 때문에 유한소수 입니다. 따라서 1을 return합니다.

입출력 예 #3

  • 분수 12/21는 기약분수로 나타내면 4/7 입니다. 분모 7은 소인수가 7 이므로 무한소수입니다. 따라서 2를 return합니다.

Hint

  • 분자와 분모의 최대공약수로 약분하면 기약분수를 만들 수 있습니다.
  • 정수도 유한소수로 분류합니다.

※ 공지 - 2022년 11월 10일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.

 


  • 내 풀이
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        int num = 0;

        for (int i = 2; i <= a; i++) {
            if (a % i == 0 && b % i == 0){
                num = i;
            }
        }

        if(num != 0) {
            b /= num;
        }

        while(true){
            if(b % 2 == 0 || b % 5 == 0){
                answer = 1;
                break;
            }else {
                answer = 2;
                break;
            }
        }
                return answer;
    }
}

* 기약 분수란 분자와 분모가 서로 약분할 수 없는 분수를 말합니다

테스트 5개가 자꾸 실패하여 다른 분의 풀이를 참조한다

 

 

 

  • 다른 사람 풀이
class Solution {
    public int solution(int a, int b) {
        int answer = 1;
        int max = 0;
        for(int i =1; i<=a; i++){
            if(a%i ==0 && b%i ==0) max= i;
        }

        b /= max;

        while(b>1){
            if(b%2==0){
                b /= 2;
            }else if(b%5==0){
                b /= 5;
            }else {
                return 2;
            }
        }

        return answer;
    }
}

분모의 소인수가 2와 5만 존재해야 한다고 했는데 

난 if(b % 2 == 0 || b % 5 == 0){ 문 하나로 끝내려고 해서 문제가 생긴거 같다

지금 정리를 하면서 보니 while문을 사용해 놓고 while문을 돌리려는 목적은 정하지도 않고 사용하였네...

좀 더 생각하면 풀 수 있는 문제였는데 이런 실수를 하다니...너무 허무하다

 

댓글