프로그래머스 “분수의 덧셈” 문제 해결과정입니다.
분수의 덧셈
문제설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <
numer1,denom1,numer2,denom2< 1,000
입출력 예
| numer1 | denom1 | numer2 | denom2 | result |
|---|---|---|---|---|
1 | 2 | 3 | 4 | 4 |
9 | 2 | 1 | 3 | 3 |
문제 해결과정
프로그래머스 코드
import java.util.stream.IntStream;
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int n = numer1 * denom2 + numer2 * denom1;
int d = denom1 * denom2;
int g = (int) IntStream.rangeClosed(1, Math.min(n, d)).filter(i -> n % i == 0 && d % i == 0).max().getAsInt();
return new int[] {n / g, d / g};
}
}
변수 n에 통분된 분자를, d에는 분모의 곱을 넣는다. g에는 최대공약수를 넣을 건데 IntStream.rangeClosed로 1부터 n,d 중 더 작은 값까지의 수를 추출한다. 추출된 수들 중 filter안에 조건을 만족하는 것들 중 가장 큰 값(max())을 추출한다. 이후 반환할 때 int 배열을 선언하여 분모 분자를 최대공약수로 나눈 값을 반환한다.