파이썬 코딩테스트

백준 2609 - 최대공약수와 최소공배수 (파이썬/Python)

준벨롭 2024. 1. 20. 11:59

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

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

답안

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

def gcd(a, b): # 최대공약수를 만드는 함수 gcd 선언
	while b != 0: # b가 0이 아니면 계속 반복
    	a, b = b, a % b # a와 b를 b, a%b로 계속 반복해주고 b가 0이 되면 그때의 a를 반환
        return a
        
# a, b가 12와 18 이라면
# a의 순서 > 12 18 12 6
# b의 순서 > 18 12 6  0
# b가 0일때 a는 6이고, 이때 6은 a, b의 최대 공약수이다.
# 최소 공배수는 a*b를 최대 공약수로 나눈 값이다.

print(gcd(a,b))
print((a*b)//gcd(a,b))

후기

나는 함수에 굉장히 취약한 편인데, 함수를 이용해서 알고리즘을 푸는 방법 역시 항상 생각해야 함을 깨닫게 되는 문제였다.

함수의 선언, 반환을 좀 더 숙지하고, 특히 재귀에 대해 더 학습해야함을 느꼈다.

728x90