백준 2609 최대공약수 최소공배수

고장난 고양이·2022년 7월 4일
0

알고리즘_python

목록 보기
46/84

문제

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

입력

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

출력

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

예제 입력 1

24 18

예제 출력 1

6
72

코드

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

def gcd(a,b):
    list_a=[]
    for i in range(1,a+1):
        if a%i==0:
            list_a.append(i)

    list_b=[]
    for j in range(1,b+1):
        if b%j==0:
            list_b.append(j)
    max=0
    for i in list_a:
        if i in list_b and max<i:
            max=i

    return max

def lcm(a,b):
    if a < b:
        tmp=b
        b=a
        a=tmp

    for i in range(1,b):
        if (a*i)%b==0:
            return a*i

    return a*b

print(gcd(a,b))
print(lcm(a,b))

gcd는 최대공약수
lcm은 최소공배수

gcd는 각수의 약수를 구한 후 같은 값들중 제일 큰값을 반환한다.
시간계산생각하면 제일 개수가 적은 리스트를 기반으로 for문을 돌리는게 맞긴한데.. 귀찮

lcm은 코드 중복을 막기위해 작은 건 b 큰건 a로 맞추고 1에서 작은값까지 확인한다.

profile
개발새발X발일지

0개의 댓글