nueijeel
[프로그래머스][python] Lv.0 - 분수의 덧셈 본문
코테 문제를 너무 오랜만에 푸는 바람에 감을 다 잃어서 ㅜㅡㅠ 레벨 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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][python] Lv.0 - 캐릭터의 좌표 (0) | 2023.02.14 |
---|---|
[프로그래머스][python] Lv.0 - 외계행성의 나이 (0) | 2023.02.14 |
[프로그래머스][python] Lv.0 - 최빈값 구하기 (0) | 2023.02.09 |
[프로그래머스][python] Lv.0 - 옹알이 (0) | 2023.02.08 |
[프로그래머스][python] Lv.0 - 평행 (0) | 2023.02.08 |