반응형
풀이
- 우선 기약분수와 소인수에 대한 정의를 한 번 하고 가자면
- 기약분수란? 분자와 분모의 공약수가 1로만 이루어져 있는 분수.
- 소인수란? 주어진 자연수를나누어 떠러뜨리는 약수 중 소수(1)인 약수이기에
- 해당 문제는 우선 a와 b를 기약분수로 만드는 것부터 접근을 했다.
- 그래서 s가 e보다 커지기 전까지 while문을 돌렸고 의미 없이 반복하기 보단
- 마지막을 a로 지정하고 a가 줄어들면 e 또한 함께 줄여 시간을 단축하고자 했으며
- 이후 분모가 2와 5로만 나누어져서 현재 상태가 1일 경우인지 아닌지에 대한 판별하여 해결.
class Solution {
public int solution(int a, int b) {
int s = 2;
int e = a;
while (s <= e) {
if (a%s==0 && b%s==0) {
a /= s;
b /= s;
e = a;
} s++;
}
boolean state = true;
while (true) {
if (b%2==0) b/=2;
else if (b%5==0) b/=5;
else {
state = false;
break;
}
}
return (b==1)?1:2;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스, 자바] 약수의 합 (0) | 2024.03.20 |
---|---|
[프로그래머스, 자바] 자릿수 더하기 (0) | 2024.03.20 |
[프로그래머스, 자바] 문자열 밀기 (0) | 2024.03.19 |
[프로그래머스, 자바] 배열 만들기 2 (3) | 2024.03.19 |
[프로그래머스, 자바] 특이한 정렬 (1) | 2024.03.19 |