[Programmers] Lv0 유한소수 판별하기 Java
2023. 2. 2. 16:54ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/120878
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
- 기약 분수를 얻을 려면 분모, 분자를 최대 공약수로 나누면 된다.
- 약수를 구하는 방법은 두 개의 수에서 가장 작은 수를 하나씩 빼면서 두 수에 대해 동시에 나누어 떨어지는지 확인하면 된다.
- 최대 공약수는 약수중 가장 큰 수 이므로 처음 얻는 약수를 반환하면 최대 공약수가 된다.
- 무한 소수를 구하는 방법은 문제에 나와있듯이 분모의 소인수가 2와 5만 존재해야 한다.
- 이는 2와 5를 지속적으로 나누고 1이되냐 안되냐로 판단하면 된다.
소스 코드
public class Solution {
public int greatestCommonDivisor(int num1, int num2) {
for (int num = Math.min(num1, num2); num >= 2; num--)
if (num1 % num == 0 && num2 % num == 0)
return num;
return -1;
}
public int[] irreducible_fraction (int numer, int denom) {
int division = greatestCommonDivisor(numer, denom);
return (division != -1) ? new int[] {numer/division, denom/division} : new int[] {numer, denom};
}
public boolean isfIniteDecimal(int denom) {
while (denom % 2 == 0)
denom /= 2;
while (denom % 5 == 0)
denom /= 5;
return denom == 1;
}
public int solution(int a, int b) {
return isfIniteDecimal(irreducible_fraction(a, b)[1])? 1 : 2;
}
}
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv1 개인정보 수집 유효기간 Java (0) | 2023.02.03 |
---|---|
[Programmers] Lv0 치킨 쿠폰 Java (0) | 2023.02.02 |
[Programmers] Lv0 등수 매기기 Java (0) | 2023.02.02 |
[Programmers] Lv0 특이한 정렬 Java (0) | 2023.02.01 |
[Programmers] Lv0 저주의 숫자 3 Java (0) | 2023.01.31 |