알고리즘/프로그래머스
[프로그래머스 / Python] 최대공약수 최소공배수 | 초코더
cloud_nice
2020. 1. 8. 22:17
문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 사항
-행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
입출력 예
n |
m |
return |
3 |
12 |
[3,12] |
2 |
5 |
[1,10] |
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
접근법
우선 n의 모든 약수와 m의 모든 약수를 각각의 리스트에 저장해두었습니다.
그리고 n리스트, m리스트에 공통되게 들어있는 값 중 가장 큰수를 최대공약수로 리턴.
n과 m의 곱에서 최대공약수로 나눈 수를 최소공배수로 리턴.
나의 코드
def solution(n, m):
n_list = [num for num in range(1,n+1) if n%num == 0]
m_list = [num for num in range(1,m+1) if m%num == 0]
max_list = []
for max_num in n_list:
if max_num in m_list:
max_list.append(max_num)
max_sum = max(max_list)
min_sum = (n*m)/max_sum
return [max_sum, min_sum]