문제

https://www.acmicpc.net/problem/2609

걸린 시간

01 : 41 : 33

풀이

Python3

def factorizer(A, B):
    for divisor in range(2, max(A, B)+1):
        if A % divisor == 0 and B % divisor == 0:
            A = A // divisor
            B = B // divisor
            return A, B, divisor 
    return A, B, 0

if __name__ == "__main__":
    A, B = map(int, input().split())
    lcd = [] # lowest common divisor

    # 두 수가 서로소가 될 때 까지 최소공약수로 나눈다.
    while True:
        A, B, divisor = factorizer(A, B)
        # 나눈 수(제수)가 없을 때 종료
        if divisor == 0:
            break
        else:
            lcd.append(divisor)

    # 나누었던 최소공약수들을 모두 곱한게 최대공약수
    gcd = 1
    for i in lcd:
        gcd *= i     
    print(gcd)

    # 최대공약수에서 소수가 된 두 수까지 곱한 것이 최소공배수
    print(gcd * A * B)

손으로 최대공약수, 최소공배수를 구하는 과정을 그대로 구현했다. 문제를 다 풀고보니 유클리드 알고리즘이라고 몇줄 안되는 코드로 간단하게 해결하는 방법도 있었다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 10814번 나이순 정렬  (0) 2020.07.25
Baekjoon 2164번 카드2  (0) 2020.07.25
Baekjoon 11650번 좌표 정렬하기  (0) 2020.07.24
Baekjoon 1920번 수 찾기  (0) 2020.07.23
Baekjoon 1018번 체스판 다시 칠하기  (0) 2020.07.23

댓글