백준 :: 최대공약수와 최소공배수 <2609번>

혜 콩·2021년 3월 2일
0

알고리즘

목록 보기
11/61

> 문제 <

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

출처 : https://www.acmicpc.net/problem/2609

> 유클리드 호제법 <

A를 B로 나눈 나머지 값을 N이라고 했을 때,
A와 B의 최대공약수 == B와 N의 최대공약수

Idea ↓
나머지가 0이 될때까지 A, B = B, N 으로 바꾸자
1. 조건문이 N != 0 인 while 반복문 이용
2. 안에 if문 갖는 while True문 이용
3. 리턴값 갖는 함수 이용
A를 B로 나눈 나머지 값 N이 0일 때, B가 최대공약수

최소공배수 = A * B / 최대공약수

> 코드 <

# 1. 조건문이 N != 0 인 while 반복문 이용
a,b=map(int, input().split())
n=a%b   # a와 b의 나머지
newA,newB=a,b
while n!=0:
    newA,newB=newB,n
    n=newA%newB
print(newB)  # 최대공약수
m=(a*b)//newB
print(m)  # 최소공배수

# 2. 안에 if문 갖는 while True문 이용
a,b=map(int,input().split())
n=a%b   # a와 b의 나머지
A,B=a,b   #복사
while True:
    if n==0:
        print(B)  # 최대공약수
        print((a*b)//B)
        break
    A,B=B,n
    n=A%B

# 3. 리턴값 갖는 함수.ver
a,b=map(int,input().split())
def gcd(a, b):
    n=a%b
    while n>0:
        a,b=b,n
        n=a%b
    return b
def lcm(a, b):
    return (a*b)//(gcd(a,b))
print(gcd(a,b))
print(lcm(a,b))

> 개선할 점 <

  • 여러 블로그를 보면서 클론코딩을 했다.
  • 처음에 계속 런타임에러가 떠서 왜인지 몰랐는데 알고보니 몫만 나와야하는데 나는 나눗셈 표기를 '/' 사용했다... 나머지까지 나오는 나눗셈 표기는 '/ ' , 몫만 나오는 나눗셈 표기는 '// ' 이기 때문에 계속 런타임에러가 일어났다.
profile
배우고 싶은게 많은 개발자📚

0개의 댓글