[26.08.12] 분수의 덧셈

장서영·2026년 8월 12일

알고리즘

목록 보기
10/11

프로그래머스 > 분수의 덧셈

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

import math

def solution(numer1, denom1, numer2, denom2):
    answer = []
    
    sum_numer = numer1*denom2 + numer2*denom1
    sum_denom = denom1*denom2
    
    div = math.gcd(sum_numer, sum_denom)
    answer.append(sum_numer//div)
    answer.append(sum_denom//div)
    
    return answer

MADE BY ME

입력: numer1, denom1(분수1의 분자/분모) numer2, denom2(분수 2의 분자/분모)
출력: 배열 answer(두 분수 더한 값을 기약분수로 나타냈을 때의 분자와 분모가 담긴 배열)

※ 기약분수: 분모와 분자의 최대공약수가 1뿐이라서, 더이상 약분할 수 없는 상태의 분수

1) 우선 통분한다. (분모 최소공배수 이런 거 없이 그냥 제일 쉽게 곱함)
2) math의 gcd라는 모듈을 써서 최대공약수를 구함
3) 각 분모와 분자에 최대공약수로 나눠서 기약분수화 했다.


다른 코드 인사이트: 내 거랑 뭐가 다를까?

  for i in range(min(denum0,num0),0,-1):
        if denum0%i == 0 and num0%i == 0:
            s = i # 최대공약수 s
            break

모듈 없이 최대공약수 s를 구했다.

  • 분모와 분자 중 작은 수 구하는 것을 min()이라는 함수를 써서 쉽게 구했다.
  • range(시작 숫자, 끝 숫자, step)에서 step을 -1로 써서 거꾸로 돌아가게 만들어서, 진짜 '최대' 공약수를 바로 끄집어 냈다.
from fractions import Fraction

파이썬 기본 내장 모듈인 fractions에서 분수 계산을 담당하는 Fraction 클래스를 사용 -> 자동으로 기약분수 형태로 정리해 준다고 함

profile
하루살이 개발자

0개의 댓글