Java

[프로그래머스] 분수의 덧셈

gogi masidda 2023. 10. 30. 18:24

첫 번째 분수의 분자와 분모를 뜻하는 numer1denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

나의 풀이

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        int denom = LCM(denom1, denom2);
        numer1 = numer1 * (denom / denom1);
        numer2 = numer2 * (denom / denom2);
        int numer= numer1 + numer2;
        int gcd = GCD(denom, numer);
        if(gcd == 0){
            answer[0] = numer;
            answer[1] = denom;
        }
        else{
            answer[0] = numer / gcd;
            answer[1] = denom / gcd;
        }
        return answer;
    }
    
    int GCD(int num1, int num2) {
        if (num2 == 0) {
            return num1;
        } else {
            return GCD(num2, num1 % num2);
        }
    }
    
    
    int LCM(int num1, int num2){
        return (num1 * num2) / GCD(num1, num2);
    }
    
}

유클리드 호제법을 이용해서 LCM, GCD를 구한다. 

다른 사람의 풀이

class Solution {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int mother = num1 * num2;
        int son1 = num1 * denum2;
        int son2 = num2 * denum1;
        int totalSon = son1 + son2;
        for(int i = mother; i >= 1; i--){
            if(totalSon % i == 0 && mother % i == 0){
                totalSon /= i;
                mother /= i;
            }
        }
        int[] answer = {totalSon, mother};
        return answer;
    }

분모를 num1, num2를 곱해서 만든다. 분자는 상대의 분모 값을 곱해서 만든다. 그리고 각각을 더한다. for문을 이용해서 기약 분수로 만든다.

728x90

'Java' 카테고리의 다른 글

[프로그래머스] 짝수는 싫어요  (0) 2023.10.31
[프로그래머스] 최빈값  (0) 2023.10.31
[웹]웹 서버, 웹 애플리케이션 서버  (0) 2023.09.30
[웹] 검증 헤더와 조건부 요청  (0) 2023.09.24
[웹]HTTP 상태 코드  (0) 2023.09.17