문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
풀이 코드
using System;
public class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
// 최소공배수 구하기
var newDenom = lcm(denom1, denom2);
// 최소공배수로 통분하기
numer1 *= (newDenom / denom1);
numer2 *= (newDenom / denom2);
int[] answer;
// 최대공약수 구하기 (기약분수를 만들기 위해서)
var temp = gcd(numer1 + numer2, newDenom);
if (temp != 1) // 1이 아니면 나눠준다.
{
answer = new int[] { (numer1 + numer2) / temp, newDenom / temp };
return answer;
}
answer = new int[] { numer1 + numer2, newDenom };
return answer;
}
public int gcd(int a, int b)
{
while(b > 0)
{
int c = a % b;
a = b;
b = c;
}
return a;
}
public int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
}
'프로그래밍 > Algorithm' 카테고리의 다른 글
[프로그래머스 Programmers] 길 찾기 게임 (0) | 2023.09.14 |
---|---|
[프로그래머스 Programmers] 하노이의 탑 (1) | 2023.09.07 |
동적 계획법(Dynamic Programming, DP) (0) | 2023.09.01 |
[프로그래머스 Programmers] 거스름돈 (0) | 2023.09.01 |
깊이 우선 탐색(Depth-first search, DFS) (1) | 2023.08.30 |
댓글