프로그래머스(Programmers)를 통해 코딩 테스트 사전 연습한 사항입니다.
요약
- 출처: 프로그래머스(Programmers)
- 번호: 120808
- 문제: 분수 더하기
코드
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int denom3 = denom1 * denom2;
int numer3 = numer1 * denom2 + numer2 * denom1;
int min = denom3 < numer3 ? denom3 : numer3;
for(int i = min; i > 1; i--) {
if(numer3 % i == 0 && denom3 % i == 0) {
numer3 /= i;
denom3 /= i;
}
}
int[] answer = {numer3, denom3};
return answer;
}
풀이
분수의 덧셈 결과를 얻는 방법은 아래와 같습니다.
- 분자의 합을 구한다.
- 분자1 * 분모2 + 분자2 * 분모1
- 공통 분모를 구한다.
- 분모1 * 분모2
- 구한 분자/분모를 기약분수(더이상 나눌 수 없는 분수) 형태로 만든다.
위 로직에 맞춰 분자와 분모 값을 구합니다.
마지막으로 기약분수 형태로 만들어주기 위해 분모와 분자 중 작은 값을 구하여 자연수 2부터 해당 값까지 반복문을 통해 공통 인자로 동시에 나누어 떨어지는 값으로 분자/분모를 유지하도록 반복합니다.
이 때, 분자와 분모 중 작은값이 아닌 큰 값으로 하는 경우 불필요한 반복 횟수가 증가되어 작은 값으로 진행해야합니다.
또한, 자연수 2부터 증가하는 값이 아닌 자연수 2로 작아지는 값으로 나누어야 단 1번의 반복문으로 결과값을 도출할 수 있습니다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120808
저장소
https://github.com/Ardium/TIL/blob/master/CodingTest/Java/src/programmers/level0/Java_120808.java

'Programming > Test' 카테고리의 다른 글
[Java] 소인수분해 - Programmers Q120852 (0) | 2023.04.05 |
---|---|
[Java] 개미 군단 - Programmers Q120837 (0) | 2023.04.04 |
[Java] 자릿수 더하기 - Programmers Q120906 (0) | 2023.03.31 |
[Java] 짝수의 합 - Programmers Q120831 (0) | 2023.03.29 |
[Java] 중앙값 구하기 - Programmers Q120811 (0) | 2023.03.28 |
댓글