분수 합
문제설명
두 수를 입력 받는 데 각각 분자, 분모 순으로 입력 받는다. 두 분수의 합을 구해서 기약분수 형태로 구해서 결과 값의 분자와 분모를 출력한다.
알고리즘
- 두 수의 분자와 분모를 각각 입력 받는다.
- 통분을 위해서 각각의 분자에 다른 수의 분모 값을 곱하고 두 값을 더한다.
- 분모는 두 수의 분모를 곱한 값이다.
- 기약분수 형태로 나타내기 위해서 결과값의 분모와 분자 중에 어떤 값이 더 작은지 판단한다.
- 더 작은 값을 기준으로 1씩 줄여가면서 분자 분모의 나머지가 모두 0이 되는 값을 찾아 그 수로 나눈다.
- 결과 값을 출력한다.
#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 |