핵심 아이디어
n과 m의 큰 수와 작은 수를 구하여, x에는 작은 수의 약수들을 넣는다.
x에 포함되는 수중에서 큰 수와 나눠지는 수 중에서 가장 큰 값을 최대 공약수로 구한다.
그리고 두 수의 곱은 최소공배수 x 최대공약수를 사용하여, 최소공배수를 구한다.
첫 코드
def solution(n, m):
x = []
y = []
answer = []
temp = [n, m]
a = min(temp)
b = max(temp)
for i in range(1, a+1):
if a % i == 0:
x.append(i)
for j in x:
if b % j == 0:
y.append(j)
gcd = max(y)
lcm = int((m * n) / gcd)
answer.extend([gcd, lcm])
return answer
개선 코드 1
def solution(n, m):
answer = []
temp = [n, m]
a = min(temp)
b = max(temp)
x = [i for i in range(1, a+1) if a % i == 0]
y = [j for j in x if b % j == 0]
gcd = max(y)
lcm = int((m * n) / gcd)
answer.extend([gcd, lcm])
return answer
List Comprehension으로 좀 더 간략하게 개선해 보았습니다.
개선 코드 2
import math
def solution(n, m):
answer = []
a = math.gcd(n, m)
b = int(n*m/a)
answer.extend([a, b])
return answer
math library를 사용하여 최대공약수와 최소공배수를 구할 수 있습니다. math.lcm()는 파이썬 3.9부터 사용 가능하므로, 두수의 곱은 최대공약수 X 최소공배수를 활용하여 최소공배수를 구하였습니다.
'알고리즘 > 프래그래머스 lv.1' 카테고리의 다른 글
문자열 다루기 기본 (0) | 2022.10.18 |
---|---|
정수 제곱근 판별 (0) | 2022.10.18 |
자릿수 더하기 (0) | 2022.10.18 |
행렬의 덧셈 (0) | 2022.10.18 |
직사각형 별찍기 (0) | 2022.10.18 |