관리 메뉴

솜씨좋은장씨

[Programmers] 분수의 덧셈 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 분수의 덧셈 (Python)

솜씨좋은장씨 2023. 2. 21. 12:03
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 분수의 덧셈 입니다.

 

프로그래머스

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

programmers.co.kr

👨🏻‍💻 문제 풀이

분수의 덧셈은 아래의 과정을 통해 진행됩니다.

  1. 첫째, 두 분수를 통분한다.
  2. 둘째, 분자끼리 더한다.
  3. 셋째, 합을 기약분수 꼴로 적는다.

먼저, 두 분수를 통분하기 위해서는 두 분모의 최소 공배수를 구해야합니다.

from math import gcd

def get_lcm(A, B):
    return A * B // gcd(A, B)
    
denom_lcm = get_lcm(A=denom1, B=denom2)

분모의 최소 공배수를 구했으면 각 분수의 분자도 분모가 최소공배수로 변한만큼 바꾸어 주어야하므로 

각 분자에 최소공배수 // 분모 값 만큼 곱해 주고 이를 더해줍니다.

answer_numer = numer1 * (denom_lcm // denom1) + numer2 * (denom_lcm // denom2)
answer_denom = denom_lcm

마지막으로 기약분수로 만들어주기 위하여 위에서 구한 분자와 분모의 최대공약수를 구하고

위에서 구한 정답 분자 정답 분모값을 최대 공약수 값으로 나누어주면 끝!

from math import gcd

def get_gcd(A, B):
    return gcd(A, B)
    
numer_denom_gcd = get_gcd(A=answer_numer, B=answer_denom)

answer = [answer_numer // numer_denom_gcd, answer_denom // numer_denom_gcd]

👨🏻‍💻 코드 ( Solution )

from math import gcd

def get_lcm(A, B):
    return A * B // gcd(A, B)

def get_gcd(A, B):
    return gcd(A, B)

def solution(numer1, denom1, numer2, denom2):
    answer = []
    
    denom_lcm = get_lcm(A=denom1, B=denom2)
    
    answer_numer = numer1 * (denom_lcm // denom1) + numer2 * (denom_lcm // denom2)
    answer_denom = denom_lcm
    numer_denom_gcd = get_gcd(A=answer_numer, B=answer_denom)
    
    answer = [answer_numer // numer_denom_gcd, answer_denom // numer_denom_gcd]
    
    return answer
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments