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 |