문제 개요
이 문제에서는 두 개의 유리수(Rational Number)가 주어지며, 우리의 과제는 두 유리수 중 더 큰 값을 찾는 것입니다.
여기서 유리수는 p/q 형태로 표현됩니다.
예시를 통해 문제를 이해해 보겠습니다.
입력: rat1 = 5/4, rat2 = 3/2
출력: 3/2
설명:
5/4 = 1.25
3/2 = 1.5
1.5가 1.25보다 크므로 두 수 중 최댓값은 3/2입니다.
풀이 접근 방식
이 문제를 해결하는 가장 간단한 방법은 학교 시절 분수를 비교하던 방식과 유사한 방법을 사용하는 것입니다.
구체적인 단계는 다음과 같습니다.
1. 두 분모의 최소공배수(L.C.M)를 구합니다.
2. 각 분모가 최소공배수가 되도록 분자를 적절히 곱하여 통분합니다.
3. 공통 분모 상태에서 분자 값이 더 큰 유리수가 바로 최댓값이 됩니다.
이 방식은 실수 연산으로 인한 오차 없이 정수 연산만으로 정확하게 두 유리수를 비교할 수 있다는 장점이 있습니다.
솔루션 구현 예제
#include <bits/stdc++.h>
using namespace std;
int findLCM(int a, int b) {
return (a * b) / (__gcd(a, b));
}
void maxRational(int ratOneNum, int ratOneDen, int ratTwoNum, int ratTwoDen) {
int k = findLCM(ratOneDen, ratTwoDen);
int oneNum = ratOneNum * k / (ratOneDen);
int twoNum = ratTwoNum * k / (ratTwoDen);
if(oneNum > twoNum)
cout<<ratOneNum<<"/"<<ratOneDen;
else
cout<<ratTwoNum<<"/"<<ratTwoDen;
}
int main() {
int ratOneNum = 5;
int ratOneDen = 4;
int ratTwoNum = 3;
int ratTwoDen = 2;
cout<<"The maximum of the two rational Numbers is ";
maxRational(ratOneNum, ratOneDen, ratTwoNum, ratTwoDen);
return 0;
}
출력 결과
The maximum of the two rational Numbers is 3/2
코드 설명
findLCM 함수: 유클리드 호제법으로 구한 최대공약수(__gcd)를 이용해 두 수의 최소공배수를 계산합니다.
maxRational 함수: 두 분모의 최소공배수 k를 구한 뒤, 각 분자를 k로 나눈 몫을 곱해 통분된 분자 값을 만듭니다. 그 후 두 분자를 비교하여 더 큰 분자를 가진 유리수를 출력합니다.
예제에서는 5/4와 3/2를 비교하며, 분모의 최소공배수는 4이므로 5/4 → 5, 3/2 → 6으로 변환됩니다. 6 > 5이므로 3/2가 출력됩니다.