📝 문제
> 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다.
https://programmers.co.kr/learn/courses/30/lessons/12940
코딩테스트 연습 - 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의
programmers.co.kr
🎨 풀이
💡 첫 번째 시도 = 성공
def solution(n, m):
answer = []
tmp = 0
max = 1
if m < n :
tmp = n
n = m
m = tmp
for i in range(1,n+1):
if m % i == 0:
if n % i == 0:
max = i
min = m * n / max
answer.append(max)
answer.append(min)
return answer
> 최소 공배수 = 두 수의 곱 / 최대 공약수 라는 점을 이용한 게 핵심이다.
- ex ) 12 = 3 * 12 / 3 (테스트 케이스 1번)
1. if 문과 tmp를 이용해서 m에 큰 수가 오도록 두 값을 바꿔주거나 유지시킨다.
2. for문을 통해서 m과 n이 모두 나눠지는 i가 있으면 max에 넣는다. (최대 공약수 부분)
- n이 더 작은 수라 n을 기준으로 for문을 돌림.
3. 맨 위에서 말했던 식을 이용해서 최소 공배수를 구한다.
4. 최대 공약수와 최소 공배수를 순서대로 answer에 append 해준 후 return 한다.

끝~
⭐ 느낀점
> 수정해야할 부분이 많은 것 같긴 한데,, 이 문제도 종종 보는 것 같다. 아예 효율적인 방법을 외워도 되지 않을까 싶다.
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 이상한 문자 만들기 (파이썬) (0) | 2022.05.01 |
---|---|
[프로그래머스 / Level 1] 약수의 합 (파이썬) (0) | 2022.04.30 |
[프로그래머스 / Level 1] 제일 작은 수 제거하기 (파이썬) (0) | 2022.04.28 |
[프로그래머스 / Level 1] 정수 내림차순으로 배치하기 (파이썬) (0) | 2022.04.27 |
[프로그래머스 / Level 1] 자연수 뒤집어 배열로 만들기 (파이썬) (0) | 2022.04.26 |