공부/알고리즘

2609문제 python - [백준-실버5/최대공약수 최소공배수]

1Seok 2022. 6. 1. 19:03

문제 내용 요약

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

문제 원리파악

최대 공약수 : 두 수의 약수를 구해서 같은 약수중 최대값 출력

최소 공배수 : 두 수중 작은수에 곱하는 값을 1씩 더해 같아질 때까지 반복
24 18일경우

a0_count = 1

a1_count = 1

18 * 2 = 36 // a1_count + 1증가

 

24 36 

24 * 2 // a0_count + 1증가

이런식으로, 반복하여 같아질 때까지 진행

풀이

a = list(map(int,input().split(" ")))

a1_list = []

# 최대 공약수
for i in range(len(a)):
    plus = []
    # 약수 구하는 알고리즘
    for j in range(1,a[i]+1):
        if a[i] % j == 0:
            plus.append(j)
    a1_list.append(plus)



# 최소공배수
a1_c = 1
a2_c = 1
a1 = a[0]
a2 = a[1]

while a1 !=  a2:
    if a1 > a2:
        a2_c = a2_c + 1
        a2 = a[1] * a2_c
    
    elif a1 < a2:
        a1_c = a1_c + 1
        a1 = a[0] * a1_c
        
print(max(set(a1_list[0]) & set(a1_list[1])))
print(a1)

깨달은점

차근차근 하나하나 쉬운거부터 풀어가면 어려운 문제도 풀 수 있지 않을까 라는 생각