[python] 백준 3036 : 링

728x90

[python] 백준 3036 : 링

3036번: 링 (acmicpc.net)

 

3036번: 링

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

www.acmicpc.net

실버 3

수학, 정수론, 유클리드 호제법


접근

기약분수는 분모와 분자를 더이상 약분할 수 없는 분수를 뜻한다.

따라서 분모와 분자의 최대공약수로 나누는 방법으로 구할 수 있다.

 

12와 3의 경우 최대공약수가 3이므로 각각을 3으로 나누면

4와 1이 된다. 이를 분자/분모의 형태로 출력하도록 만들어야 한다.

 

코드 (최대공약수를 반환하는 라이브러리 사용)

import sys; input = sys.stdin.readline
from math import gcd
N = int(input())
lst = list(map(int, input().split()))
for i in range(1, N):
    num_gcd = gcd(lst[0], lst[i])
    print(f'{lst[0]//num_gcd}/{lst[i]//num_gcd}')

 

코드 (유클리드 호제법으로 최대공약수를 구함)

import sys; input = sys.stdin.readline
def gcd(x, y):
    while y:
        x, y = y, x%y
    return x

N = int(input())
lst = list(map(int, input().split()))
for i in range(1, N):
    num_gcd = gcd(lst[0], lst[i])
    print(f'{lst[0]//num_gcd}/{lst[i]//num_gcd}')

 

[파이썬] 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기 (tistory.com)

 

[파이썬] 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기

[파이썬] 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기 유클리드 호제법 A>B일때, A%B를 R이라고 할때, A와 B의 최대공약수와 B와 R의 최대공약수가 같다는 원리이다. A에 B를 대입

afterdawncoding.tistory.com

 

728x90