슬기로운 연구생활

[프로그래머스] 최대공약수와 최소공배수 본문

슬기로운 코테 생활

[프로그래머스] 최대공약수와 최소공배수

vhrehfdl 2020. 12. 18. 14:59

* 문제

programmers.co.kr/learn/courses/30/lessons/12940

 

코딩테스트 연습 - 최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의

programmers.co.kr

 

* 문제 풀이 

- 첫째, n과 m중 가장 작은 수를 찾는다.

- 둘째, 가장 작은 수부터 반복문을 사용해 -1씩해 n과 m을 나머지가 동시에 0이 되는 값이 최대 공약수이다.

- 셋째, n과 m을 곱해 시작 수를 설정한다.

- 마지막, n과 m으로 나눈 나머지가 동시에 0이 되는 값이 최소 공배수이다.

 

* 생각

- 최대공약수와 최소 공배수를 구하는 규칙을 찾는게 약간 어려웠다.

유클리드 호제법을 이용하면 최적화되게 구할 수 있는 것 같다.

이러한 문제 풀이능력이 쌓여서 고급 문제도 풀 수 있는 것 같다.

 

* 코드 

def solution(n, m):
    answer = []
    
    min_val = min(n, m)
    for i in range(min_val, 0, -1):
        if (n%i == 0) and (m%i == 0):
            answer.append(i)
            break
            
    max_val = n * m
    for i in range(min_val, max_val+1):
        if (i%n == 0) and (i%m == 0):
            answer.append(i)
            break
            
    return answer

 

Comments