본문 바로가기
Algorithm/Python

백준 1934번 최소공배수

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

1. 문제 설명

문제링크

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다.

두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.

  • 입력
    • 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000)
  • 출력 :첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다.

2. 코드

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

input = sys.stdin.readline

for _ in range(int(input())):
    a, b = map(int, input().split())

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

    print(G)

# 유클리드 호제법
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 # 유클리드 호제법 이용해서 최대 공약수를 구한 후 최소 공배수를 구하는 방법.
for _ in range(int(input())):
    a, b = map(int, input().split())

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

    print(L)

3. 회고

Q. 문제를 보고 든 생각

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

4. 고쳐야 할점

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

728x90

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

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