728x90
문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요.
배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다.
예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
- 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
접근 방법
방법1
def solution(n, m):
answer = []
beasu = n*m
yaksu = 0
for i in range(2, m+1):
if n%i == 0 and m%i == 0:
yaksu = i
elif yaksu == 0:
yaksu = 1
answer.append(yaksu)
for i in range(beasu, 1, -1):
if i%n == 0 and i%m == 0 and i<beasu:
beasu = i
answer.append(beasu)
return answer
이 방법은 내가 처음 생각한 방법인데 코드도 긴 것같고 효율적이지않은 것 같다ㅠㅠ
방법2 (프로그래머스 다른사람풀이보기)
def gcdlcm(a, b):
c, d = max(a, b), min(a, b)
t = 1
while t > 0:
t = c % d
c, d = d, t
answer = [c, int(a*b/c)]
return answer
최대공약수 구하는 법: (두 수 중 작은 수) 나누기 (두 수를 나눈 나머지)를 반복하여 나머지가 0이될때의 값.
최소공배수 구하는 법: (두 수의 곱) 나누기 (최대공약수)
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Level 1) 정수 내림차순으로 배치하기(Python) (0) | 2021.11.23 |
---|---|
프로그래머스 Level 1) 제일 작은 수 제거하기(Python) (0) | 2021.11.23 |
프로그래머스 Level 1) 콜라츠 추측 (0) | 2021.11.19 |
프로그래머스 Level 1) 하샤드 수 (0) | 2021.11.18 |
프로그래머스 Level 1) 리스트 평균 구하기 (0) | 2021.11.18 |