programmers

[JAVA] ☆ 분수 덧셈

아잠만_ 2024. 3. 8. 20:57
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

풀이1)

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int answer[] = new int[2];
        
        //분모를 같게 해주기 위해 각각의 분자에 분모값을 곱하여 덧셈
        int numer = numer1*denom2 + numer2*denom1;
        int denom = denom1*denom2;

	// 최소공배수 구하기
        int gcd = 0;      
        for(int i=1;i<=denom && i<=numer;i++){
          if((denom%i==0) && (numer%i==0)){
              gcd=i;
          }  
      }
      answer[0] = numer/gcd;
      answer[1] = denom/gcd;

       
        
        return answer;
        }

}

 

풀이2)

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        int numer = (numer1*denom2)+(numer2*denom1);
        int denom = denom1*denom2;

        int n = gcd(numer, denom);
        answer[0] = numer/n;
        // 만약 분모가 약분으로 인해 없어질 때 0 값 출력
        if(denom/n==1){
            answer[1]=0;
        } else{
        answer[1] = denom/n;
        }
        return answer;
    }
    
    public static int gcd(int num1, int num2) {
        if(num1%num2 == 0) {
            return num2;
        }
        return gcd(num2, num1%num2);
    }
        
}