본문 바로가기
Programming/Test

[Java] 분수 더하기 - Programmers Q120808

by 돌방로그 2023. 4. 3.

프로그래머스(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

 

 


 

댓글