[프로그래머스] 분수의 덧셈

당당·2023년 4월 22일
0

프로그래머스

목록 보기
26/245

https://school.programmers.co.kr/learn/courses/30/lessons/120808

📔문제

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


🚫제한사항

0 <numer1, denom1, numer2, denom2 < 1,000


📝입출력 예

numer1denom1numer2denom2result
1234[5, 4]
9213[29, 6]

📝입출력 예 설명

입출력 예 #1

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


입출력 예 #2

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


🧮알고리즘 분류

  • 수학
  • 조건문

📃소스 코드

class Solution {
    public int GCD(int a, int b){
        if(a%b==0){
            return b;
        }
        return GCD(b,a%b);
    }
    
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        int top=0, under=0;
        int anstop=0, ansun=0;
        
        if(denom1==denom2){
            under=denom1;
            top=numer1+numer2;
        }
        else if(denom1%denom2==0){
            under=denom1;
            top=numer1+denom1/denom2*numer2;
        }
        else if(denom2%denom1==0){
            under=denom2;
            top=numer2+denom2/denom1*numer1;
        }
        else{
            under=denom1*denom2;
            top=numer1*denom2+numer2*denom1;
        }
        
        anstop=top/GCD(top,under);
        ansun=under/GCD(top,under);
        answer[0]=anstop;
        answer[1]=ansun;
        return answer;
    }
    
    
}

📰출력 결과


📂고찰

생각보다 엄청 걸렸다.
심지어 코드 하나는 인터넷에 검색해보았다.

https://arinnh.tistory.com/74
GCD를 구하는 코드

public int GCD(int a,int b){
	if(a%b==0){  //a가 b로 나눠져서 나머지가 0이면 최대공약수는 b라는 뜻
    	return b;
    }
    return GCD(b,a%b); b와 a%b의 최대공약수를 확인한다.
  }

그리고 마지막에 top=top/GCD(top,under)이라고 해서
값이 변해서 결과값이 제대로 출력이 안됐던 것이다.

최대공약수 구하는 알고리즘은 그냥 기억하자~!!

profile
MySQL DBA 신입 지원

0개의 댓글