공부/알고리즘
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)
깨달은점
차근차근 하나하나 쉬운거부터 풀어가면 어려운 문제도 풀 수 있지 않을까 라는 생각