알고리즘 공부(C++)

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

혀니리리 2022. 9. 2. 17:30
728x90

2609번: 최대공약수와 최소공배수 (acmicpc.net)

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

브론즈인데도 어렵다고 느껴졌던 . ...

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

tmp = 0
for i in range(min(a,b), 0, -1):
    if a % i == 0 and b % i == 0:
        tmp = int(i)
        break
print(tmp)
print(tmp * (a // tmp) * (b // tmp))

아이디어의 키포인트는 우선..

1.a랑 b중에 더 적은 값을 기준으로 계속 내려가면서 처음으로 두 값에 나머지가 0이 되는 값이 최대공약수가 된다

2.최대공약수는 더이상 서로 겹치는것으로 나눠지지 않는 공약수기때문에 각 a,b 를 최대공약수로 나눈것을 이에 곱해주면 바로 최소공배수가 됨.

728x90