have to/자바 알고리즘
분수의 덧셈 문제 - 개선
chaeyoung-
2023. 10. 24. 16:00
코드를 작성한 후에 코드를 줄이거나 더욱 빠르게 할 수 있는 방법을 생각해보았다.
문제점 : 코드를 짜는데 시간이 많이 걸린다..
많이 풀다보면 익숙해지지 않을까?
1. 개선 전의 코드
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = {0,0};
int denom, numer = 0;
if(denom1==denom2){
denom = denom1;
numer = numer1 + numer2;
}else {
denom = (denom1*denom2);
numer = (denom1*numer2) + (denom2*numer1);
}
int denom_result = denom;
int numer_result = numer;
for(int i =1; i<=denom; i++){
if(denom%i==0 && numer%i==0){
denom_result = denom /i;
numer_result = numer /i;
}
}
answer[0] = numer_result;
answer[1] = denom_result;
return answer;
}
for문의 초기값을 가장 큰 값으로 주어 -1 씩 값을 변경하며 반복문을 실행하였다.
+1을 통한 반복문보다 -1을 통한 반복문이 수행이 더 빠를 것이라 예상했다.
두 분모의 최대공약수를 찾으면 break문을 통해 for()문을 강제로 빠져나온 후 반환한다.
2. 개선 후의 코드
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int denom = denom1 * denom2;
int numer = (numer1*denom2) + (numer2*denom1);
for(int i = denom ; i>=1; i--){
if(denom%i==0 && numer%i==0){
denom /= i;
numer /= i;
break;
}
}
int[] answer = {numer,denom};
return answer;
}
}
references : https://school.programmers.co.kr/learn/courses/30/lessons/120808