문제
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
접근
유클리드 호제법을 통해 최대공약수와 최소공배수를 구해보았다.
먼저 최대공약수를 구하기 위해서 두 수 A와 B가 A>B일 때 B가 0이 될 때까지 A%B를 A에 대입한다. 그리고 A와 B의 값을 교환한다. B가 0이 되는 순간의 A값이 최대공약수가 된다.
또한 최소공배수는 A*B를 최대공약수로 나눠주면 된다. 그 이유는 A와 B의 최대공약수는 두 수 사이에 겹치는 공약수 중 최대를 구한 것이고 두 수를 곱한 것에 나눠주면 두 수가 모두 나누어 떨어지기 때문이다.
구현
먼저 입력받은 수 중에 큰 값을 n, 작은 값을 m으로 하였다.
이후 최대공약수를 구한다음 이를 활용해 최소공배수를 구한다.
N, M = map(int, input().split())
if N > M:
n, m = N, M
else:
n, m = M, N
while m!=0:
n = n%m
n, m = m, n
print(n)
print(N*M//n)
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 9461] 파도반 수열 (0) | 2021.02.23 |
---|---|
[백준 1966] 프린터 큐 (0) | 2021.02.22 |
[백준 15829] Hashing (0) | 2021.02.22 |
[백준 11050] 이항 계수1 (0) | 2021.02.20 |
[백준 2869] 달팽이는 올라가고 싶다 (0) | 2021.02.20 |