문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한사항
- 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
입출력 예 설명
입출력 예 #1
- 위의 설명과 같습니다.
입출력 예 #2
- 자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
코드
def solution(n, m):
answer = []
def lcm(n, m):
return m*n / gcd(n, m)
def gcd(n, m):
while m%n != 0:
m,n = n, m%n
return min(m,n)
answer = [gcd(n, m), lcm(n, m)]
return answer
풀이
유클리드 호제법을 이용해 최대공약수를 구하고, 두 수를 곱한 수를 gcd함수의 리턴값으로 나눠주면 최소공배수를 구할 수 있다. 이를 answer에 할당해준다.
다른 코드와 풀이
아래의 코드는 다른 사람들이 작성한 것들로, 내 코드와 비교, 참고하기 위해 가져왔다.
def gcd(a, b):
return b if a % b == 0 else gcd(b, a % b)
def lcm(a, b):
return int(a * b / gcd(a, b))
def gcdlcm(a, b):
answer = [gcd(a,b), lcm(a,b)]
return answer
a를 b로 나눈 나머지가 0이면 b를 리턴해주고, 그렇지 않으면 인자를 b와 a%b로 해서 재귀호출을 해줘 최대공약수를 구한다. 그리고 a와 b를 곱한 값을 최대공약수로 나눠주면 최소공배수가 된다.
'Coding Test' 카테고리의 다른 글
231029 예산 - Level 1 (1) | 2023.10.29 |
---|---|
231026 같은 숫자는 싫어 - Level 1 (0) | 2023.10.26 |
231024 행렬의 덧셈 - Level 1 (1) | 2023.10.24 |
231023 문자열 다루기 기본 - Level 1 (0) | 2023.10.23 |
231022 부족한 금액 계산하기 - Level 1 (1) | 2023.10.22 |