백준(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)) |