minimimi

[백준] 3036 링 본문

프로그래밍 공부/알고리즘

[백준] 3036 링

99mini 2021. 9. 27. 10:00
반응형

문제출처] https://www.acmicpc.net/problem/3036


문제요약

톱니바퀴가 맞물려 돌아갈 때 회전 수 구하는 문제

풀이

첫 번째 링과 각 링의 최대 공약수를 구하여 각각 나누어 준 후 첫 번째 링을 최대 공약수로 나눈 몫은 분자로 나머지 링을 최대 공약수를 나눈 몫은 분모로 취하면 된다.

최대 공약수를 구하는 방법은 2609번 최대공약수와 최소공배수 문제의 유클리드 호제법을 이용하면된다.
2609번문제풀이 링크]  https://zero-rabbit.tistory.com/53


소스코드는 Python 3으로 작성되었습니다.

import sys

input = sys.stdin.readline


def gcd(a, b):
    # 무조건 a > b 유지
    if a > b:
        pass
    else:
        a, b = b, a

    while b > 0:
        r = a % b
        a, b = b, r

    return a


n = int(input())
rings = list(map(int, input().split()))
first = rings[0]

for i, ring in enumerate(rings):
    if i == 0: continue
    g = gcd(first, ring)
    print(first // g, '/', ring // g, sep='')
반응형

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

[백준] 4949 균형잡힌 세상  (0) 2021.09.29
[백준] 1010 다리 놓기  (0) 2021.09.28
[백준] 1934 최소공배수  (0) 2021.09.26
[백준] 2609 최대공약수와 최소공배수  (0) 2021.09.26
[백준] 1037 약수  (0) 2021.09.25