728x90
https://www.acmicpc.net/problem/1850
문제 설명
모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오.
예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A가 111이고, B가 111111인 경우에는 최대공약수가 111이다.
풀이 과정
- 나의 풀이
① 최대공약수 구하는 법
유클리드 호제법을 통해 최대공약수를 쉽게 구할 수 있다.
유클리드 호제법이란 기원전 300년 전에 나온 가장 오래된 알고리즘으로 유명하다.
유클리드 호제법으로 최대공약수를 구하는 방법은 다음과 같다.
○ 두 자연수 a,b에 대하여 a를 b로 나눈 나머지 r에 대해 a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이를 계속 반복하며 b가 0이 될 때, a값이 바로 최대공약수이다. (재귀와 반복이 느껴진다..!!)
② 문제에 적용하기
# 1850 최대공약수
import sys
input = sys.stdin.readline
def gcd_r(a,b) :
if b == 0 :
return a
else :
return gcd_r(b,a%b)
a,b = map(int,input().split())
print('1'*gcd_r(a,b))
문제에서 요구한 대로 최대공약수의 값만큼 1을 출력해준다.
'Algorithm > math' 카테고리의 다른 글
[백준] 11688 최소공배수 찾기 (파이썬 Python) (0) | 2021.08.13 |
---|---|
[백준] 2824 최대공약수 (파이썬 Python) (0) | 2021.08.13 |
[백준] 2609 최대공약수와 최소공배수 (파이썬 Python) (0) | 2021.08.13 |
[백준] 9613 GCD 합 (파이썬 Python) (0) | 2021.08.13 |
[백준] 13241 최소공배수 (파이썬 Python) (0) | 2021.08.13 |