문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
numer1 | denom1 | numer2 | denom2 | result |
1 | 2 | 3 | 4 | [5, 4] |
9 | 2 | 1 | 3 | [29, 6] |
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
문제 해결
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
boolean var = (0 < numer1 && numer1 < 1000 && 0 < denom1 && denom1 < 1000 && 0 < numer2 && numer2 < 1000 && 0 < denom2 && denom2 < 1000);
/*
1. 최대공약수를 활용하여 분모를 같은 크기로 맞추고, 분자도 그에 맞춘다 --> 분모와 분자를 대각선으로 곱하기
2. 최대공약수를 구하기 위해 두 값(denum, numer)을 비교하여 더 작은 값을 min에 넣고, min까지 반복하면서 최대공약수를 찾는다. (for문 사용)
3. 구했던 두 수를 각 max(최대공약수)로 나눠서 값을 구한다.
*/
//분자 구하기
int top1 = (denom1 * numer2);
int top2 = (denom2 * numer1);
int totalTop = top1 + top2;
//분모 구하기
int bottom = denom1 * denom2;
for(int i = bottom; i >= 1; i--) {
//i로 분자, 분모가 다 나누어 떨어지는 수가 '최대공약수'
if(totalTop % i == 0 && bottom % i == 0) {
//최대공약수로 약분
totalTop /= i;
bottom /= i;
}
}
int[] answer = {totalTop, bottom};
return answer;
}
}
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/입문] Lv.0 배열 두 배 만들기, 자바(Java) (0) | 2023.08.31 |
---|---|
[프로그래머스/입문] Lv.0 나머지 구하기, 자바(Java) (0) | 2023.08.31 |
[프로그래머스/입문] Lv.0 숫자 비교하기, 자바(Java) (0) | 2023.08.31 |
[프로그래머스/입문] Lv.0 두 수의 나눗셈, 자바(Java) (0) | 2023.08.31 |
[프로그래머스/입문] Lv.0 몫 구하기, 자바(Java) (0) | 2023.08.25 |