
Soluton 1) 내 풀이
class Solution {
public int solution(int a, int b) {
int newB = b / gcd(a, b);
while (newB != 1) {
if (newB % 2 == 0) {
newB /= 2;
} else if (newB % 5 == 0) {
newB /= 5;
} else {
return 2;
}
}
return 1;
}
private int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
}
코드 및 문제 리뷰
int a와 int b가 주어진다. a를 분자로 b를 분모로 놓았을 때의 분수를 기약분수로 나타낸다.
그 분수가 유한 소수가 된다면 1을, 무한소수라면 0을 반환하는 문제이다.
여기서 유한소수가 되는 조건은 분모가 갖는 소인수가 2와 5만 존재하는 경우이다.
GCD를 활용해 우선 기약분수로 만든다. 이후 분모가 1이 될 때 까지 유한소수의 조건인 2와 5로 나눈다.
그렇게 1이 되어 반복문을 탈출하면 유한소수임이 증명 돼 1을, 2 또는 5로 나누었을 때 나누어 떨어지는 수가 아니라면 반복문 안에서 탈출 하지 못하고 조건문에 걸려 2를 반환하게 된다.
'연습문제 > 프로그래머스, 입문' 카테고리의 다른 글
| [프로그래머스 입문_java] 평행 (재공부) (0) | 2023.11.08 |
|---|---|
| [프로그래머스 입문_java] 겹치는 선분의 길이 (재공부) (0) | 2023.11.08 |
| [프로그래머스 입문_java] 저주의 숫자 3 (0) | 2023.11.07 |
| [프로그래머스 입문_java] 숨어있는 숫자의 덧셈(2) (0) | 2023.11.06 |
| [프로그래머스 입문_java] 직사각형 넓이 구하기 (0) | 2023.11.05 |