class Solution {
public int[] solution(int denum1, int num1, int denum2, int num2) {
int[] answer = new int[2];
int sub_ans1 = 0, sub_ans2 = 0;
// 약분하기 전에 값을 저장할 임시분모값과 임시분자값
sub_ans1 = num1 * num2; // 분모
sub_ans2 = num1 * denum2 + num2 * denum1; // 분자
// 그냥 분수면 상관없는데 기약분수로 만들어야하기 때문에 최대공약수를 구해야 함
int small = Math.min(sub_ans1, sub_ans2);
int c = 0;
for(int i = small; i > 0; i--) {
if(sub_ans1 % i == 0 && sub_ans2 % i ==0) {
c = i;
break;
}
}
if(c == 1) {
// 최대공약수 중 가장 작은 수 : 1
// = 약분할 게 없다는 말!
answer[0] = sub_ans2;
answer[1] = sub_ans1;
}else {
answer[0] = sub_ans2 / c;
answer[1] = sub_ans1 / c;
}
return answer;
}
}
for문을 사용해서 최대공약수 구하는 방법!
숫자 A, B 중 작은 수를 구한다
-> Math.min()
메서드 사용
1번에서 구한 작은 수로 시작하는 for문을 작성한다
-> 최대공약수 중 가장 작은 수는 1이기 때문에 i
값이 1이 될 때까지 반복!
-> 큰 수부터 작은 수까지 반복하는 거니까 증감식은 i--
사용!
A와 B를 i
로 나누었을 때 동시에 0이 되는 값 변수에 저장
-> 주의! 큰 수부터 차례대로 i
값에 저장되기 때문에 i
만 출력할 경우, 가장 작은 수가 i
에 저장된다
-> 따라서 break문 작성 필수!
딱 기다려
반드시 받아낸다 머쓱이 스티커...!