TIL#12 PYTHON 최대공약수, 최소공배수

Dasom·2020년 7월 25일
0

python

목록 보기
9/50
post-thumbnail

사전스터디를 하면서 1주에 10문제 정도씩 돌아가면서 예제를 내고 풀어오는 과정을 하고 있다. 1문제당 2시간이 걸리는 경우도 있었다. 그래도 풀게 되면 느끼게 되는 성취감으로 인해 풀릴 때까지 붙들고 있기도 했다.

그 중에 n개의 자연수를 입력받아 그 수들의 최소공배수를 구하는 예제가 있었다. 어릴적의 수학의 기억을 더듬어 최소공배수는 주어진 수들을 최대공약수로 나눈 몫과 최대공약수를 곱하여 나온다는 것을 기억해냈다. 1시간을 붙들고 있었지만 결국은 2개의 자연수를 이용해 최소공배수를 구하는 코드만 짤 수 있었다. 다음주의 스터디를 통해서 다른 분들의 코드도 보고 더 배워야겠다😭

먼저 최대 공약수를 구하는 함수를 만들었다. 따로 만들지 않으면 식이 너무 길어질 거 같아서... 이미 너무 길다😰

def gcd(a, b): #최대공약수 만드는 함수 
    if a > b:
        min = b
    else:
        min = a

    for i in range(min+1, 1, -1):
        if a % i == 0 and b % i == 0 :
            result = i
            break
    return result

최대공약수는 둘의 약수(0으로 나누어 떨어지는 수) 중에서 제일 큰 수를 의미한다. 그래서 a 와 b 중에 작은수를 기준으로 for 문을 작성했다. 둘 중 작은수를 기준으로 -1 씩 내려가면서 약수를 찾았고 a와 b가 둘다 0으로 나누어 떨어지는 수를 찾으면 그게 최대공약수이기 때문에 break를 입력했다.

이제 최소공배수를 구하면 되는데 여기서부터 식이 너무 길어진다... 얼른 스터디를 가서 배워오고 싶다.

a = list(map(int, input('자연수를입력하세요:').split()))

for i in range(len(a)):
    lcm = gcd(a[i], a[i+1]) * (a[i] // gcd(a[i], a[i+1])) * (a[i+1] // gcd(a[i], a[i+1]))
    print(lcm)
    break

이렇게 최소공배수를 구하였다.
아직도 공부가 절실히 필요하다는 것을 느끼며 블로깅을 마친다🥵

profile
개발자꿈나무🌲

0개의 댓글