본문 바로가기
프로그래밍/Algorithm

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

by bantomak 2023. 9. 6.

문제 설명

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

 

제한사항

  • 0 <numer1, denom1, numer2, denom2 < 1,000
 

프로그래머스

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

programmers.co.kr

 

 

 

풀이 코드

using System;

public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        
        // 최소공배수 구하기
        var newDenom = lcm(denom1, denom2);
        
        // 최소공배수로 통분하기
        numer1 *= (newDenom / denom1);
        numer2 *= (newDenom / denom2);

        int[] answer;

        // 최대공약수 구하기 (기약분수를 만들기 위해서)
        var temp = gcd(numer1 + numer2, newDenom);
        if (temp != 1) // 1이 아니면 나눠준다.
        {
            answer = new int[] { (numer1 + numer2) / temp, newDenom / temp };
            return answer;
        }

        answer = new int[] { numer1 + numer2, newDenom };
        return answer;
    }
    
    public int gcd(int a, int b)
    {
        while(b > 0)
        {
            int c = a % b;
            a = b;
            b = c;
        }
        
        return a;
    }
    
    public int lcm(int a, int b)
    {
        return (a * b) / gcd(a, b);
    }
}

댓글