Study/Java

[Java 자바] 프로그래머스 Lv 0 - 분수의 덧셈

1.jun 2024. 9. 26. 13:34
728x90
반응형

 

 

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

목차
  1. 문제 설명
  2. 입출력 예시
  3. 문제 풀이

 

 


1. 문제 설명

 

 

728x90

 

문제 설명

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1,
두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다.
두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

 

제한사항

  • 0 ≤ numer1, denom1, numer2, denom2 ≤ 100

 

 

 

 

 


2. 입출력 예시

 

 

 

 

입출력 예시

#1 

1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

 

#2

9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

 

 

 

 


3. 문제 풀이

반응형

 

문제 풀이

1. 분수의 덧셈을 하기 위해서 통분을 해야 한다. 통분을 한다면, 분모가 같아진다. 

 

2. 통분되었을 때, 두 분수의 분자를 각각 공통 분모에 맞게 계산하여 합산한 값을 변수 bunja에 넣는다.

 

3. 통분되었을 때, 분모의 값을 변수 bunmo에 넣는다.

 

4. 기약분수를 만들기 위해서 for문을 사용한다.

 

5. for문은 bunja부터 1씩 감소하면서 2가 될 때까지 진행하는데, 만약 bunja도 나누어지고 bunmo도 나누어지는 값을 넣는다면, 해당하는 값으로 나눈 후 몫을 각 변수에 넣는다.

 

6. 최종 bunja 값과 bunmo 값을 배열 answer에 넣는다.

 

7. 배열 answer을 return 한다.

 

 

 

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {};
        
        int bunja = (numer1 * denom2) + (numer2 * denom1);
        int bunmo = denom1 * denom2;
        
        for(int i = bunja; i>1; i--){
            if(bunja % i == 0 && bunmo % i == 0){
                bunja /= i;
                bunmo /= i;
            }
        }
        
        answer = new int[]{bunja, bunmo};
        
        return answer;
    }
}

 

 

 

 

메모

통분 : 분모가 다른 2개 이상의 분수의 분모를 같게 하는 것

 

기약분수 : 더 이상 약분을 할 수 없는 분수

 

 

 

 

 

728x90
반응형