알고리즘/프로그래머스

[프로그래머스 / 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]