본문 바로가기
# 공부/# 그 외 흥미로운 문제들

[백준::1735 Py] 분수합

by 쁘레레레레레 2021. 12. 9.

배가고프니 간결하게 설명하겠다.

 

분수합을 다 알겠지만 말로 풀고 그걸 코드로 적으면 된다.

 

1. 분모의 크기를 맞춘다.

2. 분자도 분모따라서 * n을 해준다.

3. 분자끼리 더한다.

4. 약분해준다.

 

일단 내 경우는 두개의 리스트를 두어서 0번지엔 분자 / 1번지엔 분모가 들어가게 했고

denominator(분모)를 몇으로 해야하냐인데 최소공배수를 구해주면 간단하다.

보통 우린 분모끼리 곱하고 분자도 똑같이 해주고 약분을 하는데 뭐 그렇게 해도 사실 상관은 없다. 근데 난 있는 환경을 최대한 활용하기 위해 math를 불러와서 lcm(최소공배수함수)를 사용했다.

 

아무튼 예제처럼

2 7
3 5

라고 하자

 

분모를 맞춰주면 35가 되고, 2*5와 3*7이 나온다.

색칠 되어있는 수를 구하려면 서로 교차해서 넣어주거나 (5의 분모를 가진 분자한테 7을 넣어주고 7의 분모를 가진 분자한테 5를 넣어주는) 이미 구해진 분모에 분자를 구하는건데 앞의 경우를 하게되면 오류가 난다. 이건 뭐.. 딱히 설명안해도 알거다.

 

아무튼 저 뒤에 곱해주는 수를 구하고 곱해준다.

그렇게 분자까지 얻었다. 예제에 의하면 정답이지만, 만약 28/14 이런경우가 나온다면?

약분을 해줘서 2/1이 나오게 해야한다.

 

변수명을 고민하다 I don't know의 idk로 했다. 엄청 많이쓰는 약어

아무튼 이번엔 분자와 분모를 약분하려면 최대공약수를 구하면 된다.

 

뭐 밑엔 if문으로 분모 % idk가 0으로 딱 떨어지면 24/12 혹은 12/12 이런 상황이라 가정하고 저렇게 출력하겠단건데

지금 생각해보면 굳이 안넣고 앞에 선계산 후출력해줘도 될듯싶은데 배고파서 스킵

 

코드주의는 없다. 너무 쉽기때문

 

#[백준::1735 Py] 분수합

import sys
import math


def main():
    arFirstInput = list(map(int,sys.stdin.readline().split()))
    arSecondInput = list(map(int,sys.stdin.readline().split()))

    denominator = math.lcm(arFirstInput[1],arSecondInput[1])
    forDenomFirst = denominator / arFirstInput[1]
    forDenomSecond = denominator / arSecondInput[1]

    resultNumerator = int((arFirstInput[0] * forDenomFirst) + (arSecondInput[0] * forDenomSecond))
    
    idk = math.gcd(resultNumerator,denominator)
    if denominator % idk == 0:
        print('{0:} {1:}'.format(int(resultNumerator/idk),int(denominator/idk)))
    else:
        print('{0:} {1:}'.format(resultNumerator,denominator))
    

main()

'# 공부 > # 그 외 흥미로운 문제들' 카테고리의 다른 글

[백준::5430 python3] AC  (0) 2021.12.21
[백준::11652 Py] 카드  (0) 2021.12.11
[백준::1475 Py] 방번호  (0) 2021.12.09
#[백준::1212] 8진수 2진수  (0) 2021.12.09
[백준::1021번::Python] 회전하는 큐  (0) 2021.12.08