본문 바로가기
Algorithm/Python

백준 2609번 최대공약수 와 최소공배수

by Shark_상어 2023. 1. 5.
728x90

1. 문제 설명

문제링크

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

  • 입력
    • 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
  • 출력 :첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

2. 코드

# 라이브러리 버전
import sys
from math import gcd

input = sys.stdin.readline

a, b = map(int, input().split())

G = gcd(a, b) # 파이썬 에서 제공 하는 최대공약수에 관한 라이브러리 활용
L = (a * b) // G # 최소 공배수는 양 수의 곱의 최대 공약수로 나눈 값이다.

print(G)
print(L)

# 유클리드 호제법
import sys

input = sys.stdin.readline

def gcd(a, b):
    while b: # b는 0보다 커야 하므로 while b 를 통해서 b가 0 이면 False 이므로 실행 하지 않음을 이용!
        a, b = b, a % b # 유클리드 호제법 이용한 양 수의 최대 공약수 구하는 방식
    return a
def lcm(a, b):
    l = gcd(a, b)
    return (a * b) // l # 유클리드 호제법 이용해서 최대 공약수를 구한 후 최소 공배수를 구하는 방법.
a, b = map(int, input().split())

G = gcd(a, b)
L = lcm(a, b)

print(G)
print(L)

3. 회고

Q. 문제를 보고 든 생각

  • 라이브버리를 사용해서 푸는 방법 과 일반적인 유클리드 호제법을 사용해서 푸는 방식을 떠올렸다.
  • 두 가지 방식 이용해서 푸는 법을 작성 하고자 했다.

4. 고쳐야 할점

더 좋은 방법이 있다면 댓글로 알려주세요!!!

728x90

'Algorithm > Python' 카테고리의 다른 글

백준 4375번 1  (0) 2023.01.05
백준 1929번 소수 구하기  (1) 2023.01.05
백준 1978번 소수 찾기  (0) 2023.01.05
백준 1934번 최소공배수  (0) 2023.01.05
백준 18405: 경쟁적 전염  (1) 2023.01.03