마이의 개발 블로그

[프로그래머스] 유한소수 판별하기 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 유한소수 판별하기 (Java)

개발자마이 2023. 2. 22. 16:14
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

난이도가 높은 문제는 아닌데 다른 사람 풀이 중에 너무 간단한 답변이 있어 기록을 남기려고 가져와봤다.

 

- 두 수의 최대공약수를 구함 (gcd)

- 기약분수로 만들기 위해 분모를 최대공약수로 나눠줌

- n = 2부터 시작하여 소인수분해(나머지가 0이면 계속 나눠주고 아니면 n 증가)

- 나뉘는 숫자가 2나 5가 아닐 경우 무한소수이므로 2 리턴

 

Note

- 이거 풀었다고 3점 주던데 프로그래머스 점수 산정 기준이 뭔지 모르겠다.

- 아래는 내 답안

class Solution {
    public int solution(int a, int b) {
        int answer = 1;
        int gcd = gcd(a, b);
        
        b /= gcd;
        int n = 2;
        
        while(b > 1){
            if(b % n == 0){
                if(n != 2 && n != 5){
                    answer = 2;
                    break;
                }
                b /= n;
            }else{
                n++;
            }
        }
        
        return answer;
    }
    
    private int gcd(int a, int b){
        if(a % b == 0){
            return b;
        }
        
        return gcd(b, a % b);
    }
}

- 맨 위에 올라와있던, 너무 간단하게 풀어낸 답안. 이게 왜 통과하는지 아직 잘 이해를 못했는데 댓글보니까 통과못하는 케이스도 있는 것 같아서 정답이 아닐 수도 있을 듯 하다.

class Solution {
    public int solution(int a, int b) {
        int answer = ((a*1000)%b == 0) ? 1 : 2;
        return answer;
    }
}
반응형
Comments