본문 바로가기
Development/Baekjoon

[C#] 1735번: 분수 합

by Mobics 2025. 11. 7.

목차


    백준 단계별로 풀어보기

    25.11.07

    15단계: 약수, 배수와 소수 2


    1735번: 분수 합

    문제 링크 : https://www.acmicpc.net/problem/1735

     

    문제를 풀기 위해 알아야 할 개념

    >> 유클리드 호제법 (Euclidean Algorithm)

    : 아래 글에 정리해두었다.

     

    유클리드 호제법을 활용하여 최대공약수, 최소공배수 구하기

    목차유클리드 호제법 (Euclidean Algorithm): 두 자연수의 최대공약수를 구하는 알고리즘. 이때 호제법이란 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 뜻한다.--> 두 자연

    mobics.tistory.com

     

    문제 풀이

    : 두 분수의 합을 기약분수의 형태로 구하려면 두 분수를 합한 분자와 분모의 최대공약수를 구해서 분자와 분모를 각각 구한 최대공약수로 나누어주면 된다.

    1. StreamReader로 입력값을 받아 각각 int값으로 변환하여 분자를 담을 변수 num1, num2 와 분모를 담을 변수 den1, den2 에 담는다.
    2. 두 분수의 합을 구하기 위해 두 분모를 곱해 공통 분모로 만들고, 그에 따라 분자도 각각 맞게 곱한 후 더해준 뒤, 분자를 담을 변수 num 과 분모를 담을 변수 den 에 담는다.
    3. 삼항연산자를 통해 분자와 분모를 비교하고, 그에 맞게 유클리드 호제법을 활용하여 만든 GCD 함수에 넣어 최대공약수를 계산하고 변수 gcd 에 담는다.
    4. 분자와 분모를 각각 gcd 로 나눠서 기약분수의 형태로 만들고 이를 StreamWriter로 출력한다.

     

    정답 코드

    using System.IO;
    
    class Backjoon
    {
        static void Main(string[] args)
        {
            using var sr = new StreamReader(Console.OpenStandardInput());
            using var sw = new StreamWriter(Console.OpenStandardOutput());
    
            string[] frac1 = sr.ReadLine().Split();
            int num1 = int.Parse(frac1[0]);
            int den1 = int.Parse(frac1[1]);
            
            string[] frac2 = sr.ReadLine().Split();
            int num2 = int.Parse(frac2[0]);
            int den2 = int.Parse(frac2[1]);
    
            int num = num1 * den2 + num2 * den1;
            int den = den1 * den2;
    
            int gcd = num > den ? GCD(num, den) : GCD(den, num);
            num /= gcd;
            den /= gcd;
            
            sw.Write($"{num} {den}");
        }
    
        static int GCD(int a, int b)
        {
            if (b == 0)
                return a;
        
            return GCD(b, a % b);
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 4134번: 다음 소수  (0) 2025.11.09
    [C#] 2485번: 가로수  (0) 2025.11.08
    [C#] 13241번: 최소공배수  (0) 2025.11.06
    [C#] 1934번: 최소공배수  (0) 2025.11.05
    [C#] 11478번: 서로 다른 부분 문자열의 개수  (0) 2025.11.04