관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.유한소수 판별하기 본문

코딩테스트/자바

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

100세까지 코딩 2023. 8. 18. 02:52
문제 설명

 

풀기 전 생각
  • 저번에 풀었던 기약분수 만드는 방법을 활용, 최대공약수(gcd)를 구하기
  • 5로 나눠 떨어질 때까지 나누기, 2로 나눠 떨어질 때까지 나누기
  • 나누고 난 값이 1만 남으면 소인수는 2,5만 존재
  • 1 이외의 값이 남아있으면 소인수는 2,5 외에도 있음
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        b =  b / gcd(a, b); //분모를 최대공약수로 나눠 기약분수형태의 분모로 바꿔줌

        while ( b % 5 == 0) { // 5로 나눈 나머지가 0이면 5의 배수
             b /= 5; // 5로 나눈 수를 b에 다시 대입
        }
        while (b % 2 == 0) { // 2로 나눈 나머지가 0이면 2의 배수
           b /= 2; // 2로 나눈 수를 b에 다시 대입
        }
        if (b==1) { // b가 1이면 소인수가 2,5만 존재한다는 뜻
            answer = 1;
        } else {  // b가 1이 아닌 다른 수면 소인수가 2,5외에도 있다는 뜻
            answer = 2;
        }
        return answer;
    }
    public int gcd(int a,int b) { // 최대공약수 구하는 유클리드 호제법
        while (b > 0) {
            int temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }
}
오류 및 개선
  • 오류는 없지만 좀더 가독성 있는 코드를 발견!
최종
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        b =  b / gcd(a, b); //분모를 최대공약수로 나눠 기약분수형태의 분모로 바꿔줌

        while(b!=1){ // 1이 아닐때까지 반복
            if (b % 5 == 0) { // 5로 나눈 나머지가 0이면 5의 배수
                b /= 5; // 5로 나눈 수를 b에 다시 대입
                continue; // 다시 위에서 부터 반복문 시행
            }
            if (b % 2 == 0) { // 2로 나눈 나머지가 0이면 2의 배수
                b /= 2; // 2로 나눈 수를 b에 다시 대입
                continue; // 다시 위에서 부터 반복문 시행
            }
            return answer = 2; // 조건에 안걸리고 b가 1이 아니면 무한소수
        }
        return answer = 1; // b가 1이 되어 반복문 탈출했으면 유한소수
    }

    public int gcd(int a,int b) { // 최대공약수 구하는 유클리드 호제법
        while (b > 0) {
            int temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }
}
참고

유클리드 호제법을 사용한 이전 풀이 

 

[프로그래머스] 분수의 덧셈 with java

문제 설명 풀기 전 생각 특정 조건 나누지 말고 일반 분수의 합처럼 분모끼리 곱하고 (분모 1 * 분자 2 + 분모 2 * 분자 1) 더하기 1학년때 배운 유클리드 호제법 알고리즘을 써서 최대공약수 구하기

sjd0219.tistory.com