프로그래머스(Level 0) - 📈 분수의 덧셈

Gammi·2022년 12월 8일
0

프로그래머스

목록 보기
2/69

✔ 문제


✔ 풀이


class Solution {
  public int[] solution(int denum1, int num1, int denum2, int num2) {
    int[] answer = new int[2];
    int sub_ans1 = 0, sub_ans2 = 0;
    // 약분하기 전에 값을 저장할 임시분모값과 임시분자값
    sub_ans1 = num1 * num2; // 분모
    sub_ans2 = num1 * denum2 + num2 * denum1; // 분자
    // 그냥 분수면 상관없는데 기약분수로 만들어야하기 때문에 최대공약수를 구해야 함
  
    int small = Math.min(sub_ans1, sub_ans2);
    int c = 0;
    for(int i = small; i > 0; i--) {
      if(sub_ans1 % i == 0 && sub_ans2 % i ==0) {
        c = i;
        break;
      }
    }
    if(c == 1) {
    // 최대공약수 중 가장 작은 수 : 1
    // = 약분할 게 없다는 말!
      answer[0] = sub_ans2;
      answer[1] = sub_ans1;
    }else {
      answer[0] = sub_ans2 / c;
      answer[1] = sub_ans1 / c;
    }
    return answer;
  }
}

🔗 보충

for문을 사용해서 최대공약수 구하는 방법!

  1. 숫자 A, B 중 작은 수를 구한다

    -> Math.min() 메서드 사용


  1. 1번에서 구한 작은 수로 시작하는 for문을 작성한다

    -> 최대공약수 중 가장 작은 수는 1이기 때문에 i값이 1이 될 때까지 반복!

    -> 큰 수부터 작은 수까지 반복하는 거니까 증감식은 i-- 사용!


  1. A와 B를 i로 나누었을 때 동시에 0이 되는 값 변수에 저장

    -> 주의! 큰 수부터 차례대로 i 값에 저장되기 때문에 i만 출력할 경우, 가장 작은 수가 i에 저장된다

    -> 따라서 break문 작성 필수!













딱 기다려

반드시 받아낸다 머쓱이 스티커...!

profile
개발자가 되었어요⭐️

0개의 댓글