본문 바로가기

프로그래머스/lv0

분수의 덧셈

/*  분수의 덧셈
 * 첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1,
 * 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다.
 * 두 분수를 더한 값을 기약 분수로 나타냈을 때
 * 분자와 분모를 순서대로 담은 배열을 return
 *
 * denum1   num1    denum2  num2    result
 * 1        2       3       4       [5, 4]      1/2 + 3/4 = 5/4입니다. 따라서 [5, 4]를 return
 * 9        2       1       3       [29, 6]     9/2 + 1/3 = 29/6입니다. 따라서 [29, 6]을 return
 *
 * 최소공배수 : (a ✕ b) / (최대공약수)
 */
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import java.util.*;
 
public class programmer_0_29 {
    static int a1 = 512static int c1 = 512
    static int b1 = 512static int d1 = 512;
 
    static int a2 = 9static int c2 = 1;
    static int b2 = 2static int d2 = 3;
 
    public int getNum(int num1, int num2){
        int rst = 0;
        ArrayList ar1 = new ArrayList<>();
        ArrayList ar2 = new ArrayList<>();
 
        for(int i = 1; i <= num1; i++){
            if(num1 % i == 0){
                ar1.add(i);
            }
        }
        for(int i = 1; i <= num2; i++){
            if(num2 % i == 0){
                ar2.add(i);
            }
        }
        
        for(int i = 0; i < ar1.size(); i++){
            for(int k = 0; k < ar2.size(); k++){
                if(ar1.get(i).equals(ar2.get(k))){
                    rst = (int) ar1.get(i);
                    break;
                }
            }
        }
 
        return rst;
    }
    public int getCal(int max, int n){
        if(n == max)    return 1;
        else            return max/n;
    }
 
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int[] answer = new int[2];
 
        //다른 사람 더 간단한 풀이법
        answer[0= denum1*num2 + denum2*num1;
        answer[1= num1*num2;
        int min = (answer[0> answer[1])? answer[0]: answer[1];
        int gcd = 0;
        for (int i = 1; i <= min; i++) {
            if (answer[0] % i == 0 && answer[1] % i == 0)
                gcd = i;
        }
        answer[0= answer[0]/gcd;
        answer[1= answer[1]/gcd;
        /*
        int max = getNum(num1, num2);    //최대공약수
        int min = num1 * num2 / max;     //최소공배수
        
        answer[0] = (denum1 * getCal(min, num1)) + (denum2 * getCal(min, num2));
        answer[1] = min;
        max = getNum(answer[0], answer[1]);
        
        answer[0] = answer[0] / max;
        answer[1] = answer[1] / max;
        for(int i : answer) System.out.println(i);
        */
        for(int i : answer) System.out.println(i);
        return answer;
    }
    public static void main(String args[]){
        programmer_0_29 t = new programmer_0_29();
 
        System.out.println("---------------------------------------");
        System.out.println("result = " + t.solution(a1,b1,c1,d1));
        System.out.println("---------------------------------------");
        // System.out.println("result2 = " + t.solution(a2,b2,c2,d2));
        // System.out.println("---------------------------------------");
    }
}
cs

'프로그래머스 > lv0' 카테고리의 다른 글

가까운 수  (1) 2022.12.05
삼각형의 완성조건 (1)  (0) 2022.12.05
중복된 문자 제거  (0) 2022.12.05
k의 개수  (0) 2022.12.05
A로 B 만들기  (0) 2022.12.05