아무리 쉬운 코드도 리뷰 합니다.
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 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 합니다.
----------------------------------------------------------------------------------
public class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
// 공통 분모를 구합니다.
int commonDenom = denom1 * denom2;
// 각 분수의 분자를 공통 분모에 맞추어 변환한 후 더합니다.
int newNumer1 = numer1 * denom2;
int newNumer2 = numer2 * denom1;
int sumNumer = newNumer1 + newNumer2;
// 분자와 분모의 최대공약수를 구합니다.
int gcd = gcd(sumNumer, commonDenom);
// 기약 분수로 변환합니다.
int reducedNumer = sumNumer / gcd;
int reducedDenom = commonDenom / gcd;
return new int[] {reducedNumer, reducedDenom};
}
// 최대공약수를 구하는 함수
private int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
public static void main(String[] args) {
Solution sol = new Solution();
// 테스트 케이스
int[] result1 = sol.solution(1, 2, 3, 4);
System.out.println("[" + result1[0] + ", " + result1[1] + "]"); // 출력: [5, 4]
int[] result2 = sol.solution(9, 2, 1, 3);
System.out.println("[" + result2[0] + ", " + result2[1] + "]"); // 출력: [29, 6]
}
}
설명
- 공통 분모 계산: 두 분수의 분모를 곱하여 공통 분모를 계산합니다.
- 분자 합산: 첫 번째 분수의 분자는 두 번째 분수의 분모를 곱하고, 두 번째 분수의 분자는 첫 번째 분수의 분모를 곱하여 두 분수의 분자를 더합니다.
- 최대공약수(GCD) 계산: gcd 메서드를 사용하여 두 수의 최대공약수를 계산합니다. 이 메서드는 유클리드 알고리즘을 사용하여 재귀적으로 GCD를 구합니다.
- 기약 분수로 변환: 계산된 GCD로 분자와 분모를 나누어 기약 분수로 변환합니다.
- 결과 반환: 기약 분수의 분자와 분모를 배열로 반환합니다.
중요코드
- 두 분수의 합을 구하는 부분:
- 두 분수의 공통 분모를 구하기 위해 첫 번째 분수의 분모와 두 번째 분수의 분모를 곱합니다.
- 각 분수의 분자를 공통 분모에 맞추기 위해 첫 번째 분수의 분자는 두 번째 분수의 분모를 곱하고, 두 번째 분수의 분자는 첫 번째 분수의 분모를 곱합니다.
- 이렇게 변환된 두 분수의 분자를 더하여 두 분수의 합을 구합니다.
- 기약 분수로 변환하는 부분:
- 구한 분자와 분모의 최대공약수를 유클리드 알고리즘을 사용하여 계산합니다.
- 계산된 최대공약수로 분자와 분모를 나누어 기약 분수로 변환합니다.
실행결과
정확성 테스트
테스트 1 〉 | 통과 (0.02ms, 83.5MB) |
테스트 2 〉 | 통과 (0.02ms, 78.3MB) |
테스트 3 〉 | 통과 (0.02ms, 76.6MB) |
테스트 4 〉 | 통과 (0.03ms, 75.4MB) |
테스트 5 〉 | 통과 (0.02ms, 77.8MB) |
테스트 6 〉 | 통과 (0.01ms, 86.7MB) |
테스트 7 〉 | 통과 (0.03ms, 72.8MB) |
테스트 8 〉 | 통과 (0.02ms, 77.3MB) |
테스트 9 〉 | 통과 (0.02ms, 77.8MB) |
테스트 10 〉 | 통과 (0.02ms, 71.9MB) |
테스트 11 〉 | 통과 (0.02ms, 71.6MB) |
테스트 12 〉 | 통과 (0.02ms, 72.5MB) |
테스트 13 〉 | 통과 (0.03ms, 81.7MB) |
테스트 14 〉 | 통과 (0.02ms, 73.6MB) |
테스트 15 〉 | 통과 (0.02ms, 71MB) |
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
'ALGORITHM > 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스]마지막 두 원소 (0) | 2024.08.05 |
---|---|
[프로그래머스]이어 붙인 수 (0) | 2024.07.31 |
[프로그래머스]원소들의 곱과 합 (0) | 2024.07.31 |
[프로그래머스]주사위 게임 2 (0) | 2024.07.31 |
[ 프로그래머스]등차수열의 특정한 항만 더하기 (0) | 2024.07.30 |