Everyday Dev System

분수의 덧셈 문제 - 개선 본문

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'have to > 자바 알고리즘' 카테고리의 다른 글

empty()와 isEmpty() 차이  (0) 2023.11.21
[level 2] Title: 전화번호 목록 코드 개선:: List -> Set  (0) 2023.11.14
문자열 겹쳐쓰기 문제 - 개선  (1) 2023.10.24
문자열 합치기  (0) 2023.10.24
배열 비교하기  (0) 2023.10.18