공부/알고리즘

[단계별로 풀어보기][Python 3] 정수론 및 조합론 - 링 (3036)

도리암 2022. 5. 3. 18:41

3036번: 링 (acmicpc.net)

 

3036번: 링

출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.

www.acmicpc.net

위의 문제는 문제 자체의 알고리즘은 쉬우나 기약분수를 이용해야 하는 문제다.

 

수식 도출

각 원의 둘레는 다음과 같은 식을 가진다.

따라서 다음과 같은 식이 도출된다.

풀이

import fractions

n = int(input())

rings = list(map(int, input().split()))

R = [fractions.Fraction(rings[0], rings[i]) for i in range(1, n)]

for i in R:
    print(f"{i.numerator}/{i.denominator}")

여기서 기약분수를 이용하기 위해 fractions 모듈을 사용했다.

fractions.Friction() 메소드는 fraction() 객체를 반환한다. 

왼쪽이 분자, 오른쪽이 분모

여기서 분자와 분모를 도출하려면 다음의 메소드를 사용하면 된다.