백준

[백준] 13241 : 최소공배수 (Python/파이썬)

sson-coding 2025. 12. 8. 13:41

문제 링크

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

문제

정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다.

예:

10은 5의 배수이다 (5*2 = 10)
10은 10의 배수이다(10*1 = 10)
6은 1의 배수이다(1*6 = 6)
20은 1, 2, 4,5,10,20의 배수이다.
다른 예:

2와 5의 최소공배수는 10이고, 그 이유는 2와 5보다 작은 공배수가 없기 때문이다.
10과 20의 최소공배수는 20이다.
5와 3의 최소공배수는 15이다.
당신은 두 수에 대하여 최소공배수를 구하는 프로그램을 작성 하는 것이 목표이다.

입력

한 줄에 두 정수 A와 B가 공백으로 분리되어 주어진다.

50%의 입력 중 A와 B는 1000(103)보다 작다. 다른 50%의 입력은 1000보다 크고 100000000(108)보다 작다.

추가: 큰 수 입력에 대하여 변수를 64비트 정수로 선언하시오. C/C++에서는 long long int를 사용하고, 
Java에서는 long을 사용하시오.

출력

A와 B의 최소공배수를 한 줄에 출력한다.

예제

입력

1 1 / 3 5

출력

1 / 15

정답 및 풀이

import sys
input = sys.stdin.readline

def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

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

print(a * b // gcd(a, b))
  1. import sys
    • 빠른 입력을 위해 sys 모듈을 불러온다.
  2. input = sys.stdin.readline
    • 기본 input()보다 빠른 입력 처리 방식을 사용하도록 설정한다.
  3. def gcd(a, b):
    • 두 정수 a, b의 최대공약수(GCD) 를 구하기 위한 함수를 정의한다.
  4. while b != 0:
    • 유클리드 호제법의 조건.
    • b가 0이 될 때까지 반복하며 최대공약수를 계산한다.
  5. a, b = b, a % b
    • 유클리드 호제법 핵심 단계.
      • 새로운 a = 기존 b
      • 새로운 b = 기존 a를 b로 나눈 나머지
    • b가 0이 되면 현재 a가 GCD가 된다.
  6. return a
    • 반복이 끝난 뒤 a에 담긴 최대공약수를 반환한다.
  7. a, b = map(int, input().split())
    • 한 줄에서 두 정수 a, b를 입력받는다.
  8. print(a * b // gcd(a, b))
    • 최소공배수(LCM)를 출력한다.
    • 공식:
    • LCM = (a * b) // GCD(a, b)
    • 곱한 값을 최대공약수로 나누면 중복된 부분이 제거되어 최소공배수가 된다.

새롭게 배운 내용 및 느낀점

  • 유클리드 호제법(Euclidean Algorithm)
    • 두 수의 최대공약수를 빠르게 구하는 알고리즘
    • gcd(a, b) = gcd(b, a % b) 를 반복
  • 최소공배수(LCM) 공식
    • LCM(a, b) = (a × b) // GCD(a, b)