목차
백준 단계별로 풀어보기
25.11.07
15단계: 약수, 배수와 소수 2
1735번: 분수 합
문제 링크 : https://www.acmicpc.net/problem/1735
문제를 풀기 위해 알아야 할 개념
>> 유클리드 호제법 (Euclidean Algorithm)
: 아래 글에 정리해두었다.
유클리드 호제법을 활용하여 최대공약수, 최소공배수 구하기
목차유클리드 호제법 (Euclidean Algorithm): 두 자연수의 최대공약수를 구하는 알고리즘. 이때 호제법이란 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 뜻한다.--> 두 자연
mobics.tistory.com
문제 풀이
: 두 분수의 합을 기약분수의 형태로 구하려면 두 분수를 합한 분자와 분모의 최대공약수를 구해서 분자와 분모를 각각 구한 최대공약수로 나누어주면 된다.
- StreamReader로 입력값을 받아 각각 int값으로 변환하여 분자를 담을 변수 num1, num2 와 분모를 담을 변수 den1, den2 에 담는다.
- 두 분수의 합을 구하기 위해 두 분모를 곱해 공통 분모로 만들고, 그에 따라 분자도 각각 맞게 곱한 후 더해준 뒤, 분자를 담을 변수 num 과 분모를 담을 변수 den 에 담는다.
- 삼항연산자를 통해 분자와 분모를 비교하고, 그에 맞게 유클리드 호제법을 활용하여 만든 GCD 함수에 넣어 최대공약수를 계산하고 변수 gcd 에 담는다.
- 분자와 분모를 각각 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 |