지원연구소 공식 블로그

[PROGRAMMERS] 분수의 덧셈 (LV. 0) - Python 본문

코딩테스트/프로그래머스

[PROGRAMMERS] 분수의 덧셈 (LV. 0) - Python

지원연구소 2024. 5. 2. 02:47

[ 문제 ]

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

 

 

 

[ 제한사항 ]

  • 0 <numer1, denom1, numer2, denom2 < 1,000

[ 입출력 예 ]

numer1 denom1 numer2 denom2 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 합니다.

 

 

[ 해결 방법 ]

1. 통분 후의 분자, 분모 값을 담은 리스트 answer 선언
2. 최대 공약수를 담을 변수 max_num에 1을 할당하면서 선언
3. 2부터 answer 중에 가장 큰 값까지 반복
4. 만약 분자와 분모에 둘 다 나눴을 때 나머지가 0일 경우 max_num에 값 할당
5. 반복이 모두 끝나면 answer의 각 요소를 max_num으로 나눈 값을 할당
6. 반복이 모두 끝나면 분자와 분모를 담은 리스트 answer 반환

 

 

 

[ solution.py ]

def solution(numer1, denom1, numer2, denom2):
    answer = [numer1 * denom2 + numer2 * denom1, denom1 * denom2]
    max_num = 1
    
    for i in range(2, max(answer) + 1):
        if answer[0] % i == 0 and answer[1] % i == 0:
            max_num = i
            
    for i in range(len(answer)):
        answer[i] /= max_num
    
    return answer