[BOJ] 2609 최대공약수 최소공배수
이 문제는 생각보다 시간을 오래 써서 놀랐다. 요지는 두 수를 받아서 최대 공약수와 최소 공배수를 각각 구하는 것인데, 눈에 보이게 작성하기 위해서 각각 함수로 구분하여 return 값으로 각 값을 넘겨주도록 했다.
나의 풀이
num1, num2 = map(int, input().split(" "))
def getY(num1, num2):
array = []
for i in range(1, max(num1, num2)+1):
if (num1 % i == 0 and num2 % i == 0):
array.append(i)
return array.pop()
def getB(num1, num2):
array1 = []
array2 = []
i = 1
while i > 0:
array1.append(num1 * i)
array2.append(num2 * i)
if(num1 > num2):
if (array2[i-1] in array1):
return array2[i-1]
elif (num1 < num2):
if (array1[i-1] in array2):
return array1[i-1]
else:
return num1
i += 1
print(getY(num1, num2))
print(getB(num1, num2))
이렇게 복잡하게 작성할 코드가 아닌 것 같아서 다른 풀이를 살펴봤다. 최대공약수를 구하면 최소공배수는 공짜로 나온단다. 최대공약수 = Num1 * Num2 / 최소공배수
수학이 이렇게나 중요하다.
나의 다른 풀이
num1, num2 = map(int, input().split(" "))
def getY(num1, num2):
array = []
for i in range(1, max(num1, num2)+1):
if (num1 % i == 0 and num2 % i == 0):
array.append(i)
return array.pop()
def getB(num1, num2):
return int(num1 * num2 / getY(num1, num2))
print(getY(num1, num2))
print(getB(num1, num2))
첫 번째 풀이는 두 번째 풀이보다 6배 느리다.