[BOJ] 2609 최대공약수 최소공배수

[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배 느리다.


© 2021. All rights reserved.