문제 내용 요약
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
문제 원리파악
최대 공약수 : 두 수의 약수를 구해서 같은 약수중 최대값 출력
최소 공배수 : 두 수중 작은수에 곱하는 값을 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)
깨달은점
차근차근 하나하나 쉬운거부터 풀어가면 어려운 문제도 풀 수 있지 않을까 라는 생각
'공부 > 알고리즘' 카테고리의 다른 글
9663 문제 python N-Queen [백준-골드4/백트래킹] (0) | 2022.06.08 |
---|---|
구명보트 python - [프로그래머스/그리디 알고리즘] (0) | 2022.06.04 |
큰 수 만들기 python - [프로그래머스/그리디 알고리즘] (0) | 2022.06.01 |
10815문제 python - [백준-실버4/이분탐색] (0) | 2022.06.01 |
표 편집 문제 python - [프로그래머스/링크드리스트] (0) | 2022.06.01 |