본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 분수의 덧셈 / 유클리드 호제법

 

Level. 0

 

문제

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

* 제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000

 

풀이

class Solution {
    
    public int gcd(int a, int b){
        if(a%b == 0) return b;
        return gcd(b, a%b);
    }
    
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];

        answer[0] = numer1 * denom2 + numer2 * denom1;
        answer[1] = denom2 * denom1;
        
        int a = gcd(answer[0], answer[1]); // 최대공약수
        
        answer[0] /= a;
        answer[1] /= a;
        
        return answer;
    }
}

 

유클리드호제법을 사용하여 최대공약수를 구한 후, 분모와 분자를 나눠주어 기약분수를 만들어주었다. 

 


다른 풀이

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;
    }
}

 

 


https://school.programmers.co.kr/learn/courses/30/lessons/120808#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr