SunFly의 코딩 및 정보 블로그

[파이썬(Python)] 백준 2609번 : 최대공약수와 최소공배수 본문

백준(BaekJoon)

[파이썬(Python)] 백준 2609번 : 최대공약수와 최소공배수

SunFly 2022. 2. 25. 22:03

문제

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

입력

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

출력

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

풀이

두 수 중 하나 이상이 0일 경우를 포함시키지 않고 풀이하였다. 

import sys

input = sys.stdin.readline

N = []
N = list(map(int, input().split()))

num1 = []
num2 = []
num3 = []
res1 = []

for i in range(1, N[0]+1):
    if (N[0] % i) == 0:
        num1.append(N[0] / i)

for j in range(1, N[1]+1):
    if (N[1] % j) == 0:
        num2.append(N[1] / j)

for k in num1:
    for l in num2:
        if k == l:
            res1.append(k)

res1 = max(res1)
res2 = N[0] * N[1] // res1

print(res1)
print(res2)

당연하게도 틀린답이라고 나왔지만 기본적으로 옳은 식이다.

따라서 max와 min, 즉 최대와 최소를 구하는 함수를 이용하여 풀었다.

def calc(x, y):
    x, y = max(x, y), min(x, y)
    if y == 0:
        return x
    else:
        return calc(y, x % y)
    
N, M = map(int, input().split())
print(calc(N, M))
print(N * M // calc(N, M))