nueijeel

[프로그래머스][python] Lv.0 - 분수의 덧셈 본문

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

[프로그래머스][python] Lv.0 - 분수의 덧셈

nueijeel 2023. 2. 8. 16:33

코테 문제를 너무 오랜만에 푸는 바람에 감을 다 잃어서 ㅜㅡㅠ 레벨 0부터 차근히 도전하는 중...!!

 

문제 설명

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

 

해결 단계

 

두 분수를 더하기 위해서는 

1. 두 분수의 분모를 비교하여 통분이 필요한지 확인

2-1. 통분이 필요하다면 각 분수의 분모, 분자에 다른 분수의 분모를 곱해준다.

2-2. 통분이 필요하지 않으면 그냥 더한다.

3. 2에서 구한 분모의 최대공약수를 이용하여 분수를 기약분수로 만든다.

 

작성한 코드

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

간단한 문제지만 처음에 for문 range함수를 오름차순으로 설정해서 테스트했더니 5번 테스트 케이스에서 통과하지 못했다.

만약에 약분하는 수가 제곱수일 경우, 오름차순으로 약분하면 제곱수보다 그 제곱수의 약수로 먼저 약분되기 때문에 완전히 기약분수로 바뀌지 않는다.

range함수 범위를 내림차순 설정으로 변경해서 해결!

728x90