Programming/알고리즘

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

해치 2022. 11. 18. 01:05
728x90

1. 문제 

https://school.programmers.co.kr/learn/courses/30/lessons/120808?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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


2. Python code

math 함수 쓰면 금방 풀 수 있는데 그냥 최대공약수를 이용해서 푸는 걸로 먼저 풀었다.

def solution(denum1, num1, denum2, num2):
    answer = []
    num = denum1*num2 + denum2*num1 # 분자
    deno = num2*num1                # 분모

    gcd = 0
    # num과 deno의 최대공약수 구하기
    for j in range(min(num,deno), 0, -1):
        if num % j == 0 and deno % j ==0:
            gcd = j
            break
    
    answer = [num//gcd, deno//gcd]
    return answer

math 라이브러리 이용해서 푸는 법

import math

def solution(denum1, num1, denum2, num2):
    num = denum1 * num2 + denum2 * num1
    deno = num1 * num2
    gcd = math.gcd(num, deno)
    return [num//gcd, deno//gcd]

 

math 라이브러리 사용해서 하는게 훨씬 빠르다.