Algorithm

[백준 1735] 분수 합

moguogu 2021. 7. 30. 16:08

분수 합

문제설명

image

두 수를 입력 받는 데 각각 분자, 분모 순으로 입력 받는다. 두 분수의 합을 구해서 기약분수 형태로 구해서 결과 값의 분자와 분모를 출력한다.

알고리즘

  1. 두 수의 분자와 분모를 각각 입력 받는다.
  2. 통분을 위해서 각각의 분자에 다른 수의 분모 값을 곱하고 두 값을 더한다.
  3. 분모는 두 수의 분모를 곱한 값이다.
  4. 기약분수 형태로 나타내기 위해서 결과값의 분모와 분자 중에 어떤 값이 더 작은지 판단한다.
  5. 더 작은 값을 기준으로 1씩 줄여가면서 분자 분모의 나머지가 모두 0이 되는 값을 찾아 그 수로 나눈다.
  6. 결과 값을 출력한다.

#include <stdio.h>
#include <iostream>

using namespace std;

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);

    int a1, a2, b1, b2;//각각 분자 분모 a1/a2, b1/b2
    cin >> a1 >> a2 >> b1 >> b2;

    int res1, res2;//결과 

    res2 = a2 * b2;
    res1 = a1 * b2 + b1 * a2;

    //결과 값 중에 분모 분자 중에 더 큰 값을 찾음
    int min= 0;
    if (res1 < res2)
        min = res1;
    else
        min = res2;

    for (int i = min; i>0; i--)
    {
        if ((res1%i == 0) && (res2%i == 0))
        {
            res1 = res1 / i;
            res2 = res2 / i;
            break;
        }
    }

    //결과값 출력 
    cout << res1 << " " << res2;

    return 0;
}

고찰

이번 문제는 단순하게 두 분수의 합을 구하는 문제이다. 기약 분수 형태로 나타내기 위해서 나머지가 0이되는 가장 큰 시점을 찾아서 나누어주면 쉽게 해결할 수 있는 문제이다.

'Algorithm' 카테고리의 다른 글

[백준 1916] 최소비용 구하기  (0) 2021.07.30
[백준 2805] 나무 자르기  (0) 2021.07.30
[백준 2164] 카드2  (0) 2021.07.30
[백준 3184] 양  (0) 2021.07.30
[백준 1715] 카드 정렬하기  (0) 2021.07.30