728x90
풀이
분수의 덧셈 과정을 코드로 변환하는 것과 같다. 조건이 기약분수일 경우 최대공약수를 구하는 것을 기억할 것. 분모와 분자 중 어떤 게 더 큰 값인지 알 수 없으므로 && 연산자를 사용하여 max 값을 찾는다. max를 찾으면 최대공약수를 업데이트 하고 약분을 한다. 그 값을 배열에 넣으면 끝. 원래는 맨 위에 있던 int[] answer = { }; 를 아래쪽으로 옮겼다.
1. 분수의 덧셈을 위해 통분한다. 통분 결과를 저장할 변수 numer, denom을 생성한다.
int numer = numer1 * denom2 + numer2 * denom1;
int denom = denom1 * denom2;
2. 최대공약수를 구한다
for (int i=1; i<=numer && i<=denom; i++) {
if (numer%i == 0 && denom%i == 0 ) {
max = i; // 최대공약수 업데이트
}
}
3. 약분한다.
numer = numer/max;
denom = denom/max;
전체 코드
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
// 1. 분수의 덧셈을 위해 통분
int numer = numer1 * denom2 + numer2 * denom1;
int denom = denom1 * denom2;
// 2. 조건이 기약분수 => 최대공약수로 약분
// 분모와 분자 중 어떤 게 더 큰 값일지 알 수 없으므로
int max = 1; // 최대공약수
for (int i=1; i<=numer && i<=denom; i++) {
if (numer%i == 0 && denom%i == 0 ) {
max = i; // 최대공약수 업데이트
}
}
// 3. 최대공약수를 구했으니 약분
numer = numer/max;
denom = denom/max;
// 4. 분자와 분모를 순서대로 담은 배열
int[] answer = {numer, denom};
return answer;
}
}
728x90
'💻 코딩테스트 > programmers' 카테고리의 다른 글
프로그래머스 0단계 순서쌍의 개수 (Java 자바) (1) | 2025.01.08 |
---|---|
프로그래머스 0단계 제곱수 판별하기 (Java 자바) (0) | 2025.01.08 |
프로그래머스 0단계 양꼬치 (Java 자바) (0) | 2024.11.07 |
프로그래머스 1단계 약수의 합 (Java 자바) (0) | 2024.11.07 |
프로그래머스 0단계 각도기 (Java 자바) (0) | 2024.11.06 |