Algorithm(알고리즘)/백준
16_백준 _2609번 파이썬 최대공약수와 최소공배수
반응형
- 최소공약수는 숫자의 약수를 뽑아내서 리스트로 저장하여 각 리스트에서 가장 큰 값을 리턴하게 만들었고
최대공배수는 그냥 for문으로 입력받은 두 수중 큰 값부터 ~ 둘을 곱한 값 까지 다 돌면서
입력받은 값으로 동시에 나눠질 때를 리턴 하였다.
검색해보니 최소 공약수도 for문 안에 if문으로 동시에 나눠질 때 리던하는 방식이 있었다.
참고 (최대공약수,최소공배수)
- 풀이-1
# 최대공약수 함수
def GCD(X, Y):
if X < Y:
min = X
else:
min = Y
for i in range(min + 1, 1, -1):
if X % i == 0 and Y % i == 0:
res = i
break
return res
# 최소공배수 함수
def LCM(X, Y):
if X < Y:
max = Y
else:
max = X
for i in range(max, (X * Y) + 1):
if i % X == 0 and i % Y == 0:
res = i
break
return res
- 풀이-2
# 약수 divisor
a, b = map(int, input().split())
# 약수를 찾아 리스트로 저장
def divisor(x):
n = 1
divisors = []
while n <= x:
if x % n == 0:
divisors.append(n)
n += 1
return divisors
a_divisor = divisor(a)
b_divisor = divisor(b)
# 최대 공약수 (greatest common divisor)
def greatest_common_divisor(list1, list2):
for i in range(len(list1)):
if list1[-1 - i] in list2:
return list1[-1 - i]
return -1
# 최소 공배수 (Least Common Multiple)
def least_common_multiple(a, b):
# for문을 이용한 최소공배수 파이썬 코드
if a < b:
max = b
else:
max = a
for i in range(max, (a * b) + 1):
if i % a == 0 and i % b == 0:
return i
return -1
# 최대 공약수 출력
print(greatest_common_divisor(a_divisor, b_divisor))
# 최소 공배수 출력
print(least_common_multiple(a, b))
# 입력
24 18
# 출력
6
72
반응형
'Algorithm(알고리즘) > 백준' 카테고리의 다른 글
18_백준 _11729번 파이썬 하노이의 탑 (0) | 2021.06.20 |
---|---|
17_백준 _10250번 파이썬 ACM호텔 (0) | 2021.06.20 |
15_백준 _1037번 파이썬 약수 (0) | 2021.06.17 |
14_백준 _2869번 파이썬 달팽이는 올라가고 싶다 (0) | 2021.06.17 |
13_백준 _1436번 파이썬 영화감독 숌 (0) | 2021.06.17 |
댓글