분수의 덧셈 JAVA
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
문제 설명 : 첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
분수의 덧셈을 해본지 너무 오래라 개념부터 찾아보게됐다. 분수의 덧셈은 초등학교 5학년 과정에 있었다.. 분모가 다른 덧셈과 뺄셈을 하려면 분모를 동일하게 해주면되고, 이것을 "통분"이라고 한다.
통분후에는 분모와 분자를 같은 수로 나눠줘야 하는데, 더이상 약분되지 않는 분수 즉, 분모와 분자의 공약수가 1뿐인 분수를 "기약분수"라고 한다. 기약분수 하는 법은 분모와 분자를 그들의 최대공약수로 나누면 된다.
음 그러니까.. 분모와 분자를 각각 같은 수(최대공약수)로 나눠서 1이 아닌 다른 수로 더 이상 나눠지지 않게 해주면 된다.
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
//기약분수 하는 법은 분모와 분자를 그들의 최대공약수로 나누면 됩니다.
//즉, 분모와 분자를 각각 같은 수로 나눠서 1이 아닌 다른 수로 더 이상 나눠지지 않게.
// step1 : 두 분수를 더한 값을 기약 분수로
// step2 : 분자와 분모를 순서대로 담은 배열 return
int commonNumer1 = numer1 * denom2; //분자1
int commonNumer2 = numer2 * denom1; //분자2
int commonNumer = commonNumer1+commonNumer2; //분자의 덧셈
int commonDen = denom1 * denom2; //통분
int gcd = 0;
//최대공약수 찾기
for(int i=1; i <= commonNumer && i <= commonDen ;i++){
if( commonNumer%i == 0 && commonDen%i ==0 ){
gcd = i;
}
}
commonNumer = commonNumer/gcd; // 기약분수 분자
commonDen = commonDen/gcd; // 기약분수 분모
int[] answer = {commonNumer, commonDen};
return answer;
}
}
분수의 덧셈 개념 참고 : https://son50math.tistory.com/18
분수의 덧셈 코드 참고 : https://tripleup.tistory.com/50
728x90
300x250