Python/online judge

백준 [2609.최대공약수와 최소공배수] | Python

구름솜:D 2024. 1. 29. 15:51
728x90

✏️ 문제

https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

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

www.acmicpc.net

 

✏️ 풀이방법

- 최대공약수('GCD':Greatest Common Divison)는 두 개 이상의 수의 공통된 약수 중 가장 큰 약수를 말하고, 최소공배수('LCM':Least Common Multiple)는 두 개 이상의 수의 공통된 배수 중 가장 작은 수를 말한다. 

- 다음 그림처럼 소인수분해를 통해서 최대공약수와 최소공배수를 구할 수 있다.

1. 최대공약수(gcd)는 두 자연수 a,b를 공통으로 나누는 수(i)를 찾아 리스트(gcd)에 담아서 가장 큰 값을 출력한다.

2. 최소공배수(lcm)는 두 자연수 a,b를 최대공약수로 나누고 남은 나머지들의 곱에 최대공약수를 곱한다.

   즉, 두 자연수 a,b의 곱을 최대공약수로 나누면 된다.

 

 

📌 코드

a,b = map(int,input().split())
gcd = []
if a == b: #a와b가 서로 같은 경우 최대공약수와 최소공배수는 자기자신
    print(a)
    print(a)
else:
    i = 1
    while True:
        if a % i == 0 and b % i == 0:
            gcd.append(i)
        i += 1
        if i > a or i > b:
            break
    print(max(gcd))
    lcm = a * b // max(gcd)
    #lcm = (a//max(gcd))*(b//max(gcd))*max(gcd)
    print(lcm)

 

 

📌 결과

#입력
24 18

#출력
6
72

 

 

 

🔎 다른풀이1.

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

# 최대공약수
# a & b의 최대 공약수는 b & a를 b로 나눈 나머지의 최대 공약수
def gcd(a, b):
    while b > 0:
        a, b = b, a % b
    return a

# 최소공배수 
# a와 b의 곱을 a와 b의 최대 공약수로 나눈 값
def lcm(a, b):
    return a * b // gcd(a, b)


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

- https://rladuddms.tistory.com/107

-  유클리드 호제법으로 풀이

 

 

🔎 다른풀이2.

import math

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

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

- 파이썬에 내장된 math모듈 활용하기

 

📝 메모

- 유클리드 호제법

 

 

'Python > online judge' 카테고리의 다른 글

백준 [1193.분수찾기] | Python  (0) 2024.01.29
백준 [1934.최소공배수] | Python  (0) 2024.01.29
백준 [9063.대지] | Python  (0) 2024.01.29
백준 [2798.블랙잭] | Python  (0) 2024.01.29
백준 [10814.나이순 정렬] | Python  (0) 2024.01.29