본문 바로가기
Algorithm

프로그래머스 0단계 : 분수의 덧셈

by 코딩대원 2022. 12. 11.

✔ 프로그래머스 0단계 : 분수의 덧셈

코딩테스트 연습 > 코딩테스트 입문 > 분수의 덧셈


❓ 문제 설명

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

❗ 제한 사항

0 <denum1, num1, denum2, num2 < 1,000

🍖 입출력 예

denum1 num1 denum2 num2 result
1 2 3 4 [5,4]
9 2 1 3 [29,6]

🍙 입출력 예 설명

입출력 예 #1
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.


⏳ 문제 풀이

function solution(denum1, num1, denum2, num2) {
  let top = denum1 * num2 + denum2 * num1;
  // 분자 구하기
  let bot = num1 * num2;
  // 분모 구하기
  
  // 유클리드 호제법. 최대공약수 구하기
  let a = top;
  let b = bot;
  while(a % b !== 0){
      let r = a % b;
      
      if(r !== 0){
          a = b;
          b = r;
      }
  }
  // 최대공약수로 나눠서 배열안에 넣어주기
  return [top/b,bot/b]    
}


1. 분자와 분모를 통분해서 구해줍니다.
2. 최대 공약수를 구해줍니다.
3. 최대공약수로 나눠서 배열 안에 넣어줍니다.


👀 다른 사람의 풀이

function fnGCD(a, b){
  return (a%b)? fnGCD(b, a%b) : b;
}

function solution(denum1, num1, denum2, num2) {
  let denum = denum1*num2 + denum2*num1;
  let num = num1 * num2;
  let gcd = fnGCD(denum, num); //최대공약수

  return [denum/gcd, num/gcd];
}

최대 공약수를 구해서 푸신건 저와 같지만 깔끔하게 푸셨길래 가져왔습니다.

0단계라 만만하게 봤는데 쉬운 분수를 코드로 표현하려니 뇌정지가 왔습니다
오랜만에 들어보는 기약분수까지 쉽지않네요..

댓글


HTML
CSS

JAVASCRIPT

자세히 보기