https://www.acmicpc.net/problem/2609
처음에 내가 생각한 코드는 다음과 같다. 두 수가 모두 나누어 떨어지는 수(최대공약수)를 for문을 통해 찾는 것이었다.
a,b=map(int,input().split())
n=min(a,b)
while n>1:
if a%n==0 and b%n==0: #나머지=0
break
else:
n-=1
print(n)
print(n*(a//n)*(b//n))
물론 이 코드를 제출해서 맞기는 했지만 다른 사람들의 코드를 보면서 얼마나 내가 무식하게 풀었는지 느낄 수 있었다.
from math import*
n,m=map(int,input().split())
print(gcd(n,m),lcm(n,m))
기본 math 라이브러리로 다음과 같이 풀 수 있다.
하지만 대부분 코테에서 라이브러 사용을 권장하지 않으므로 라이브러리를 사용하지 않고 풀게 되면 다음과 같다.
a,b=map(int,input().split())
m=a*b
while b != 0::
a,b=b,a%b
print(a,m//a)
이는 유클리드 호제법에 따른 알고리즘이다.
최대공약수, 최소공배수 문제는 유클리드 호제법을 따르면 간단하게 풀 수 있었다.
유클리드 호제법,,, 이산수학 시간에 배웠는데 이걸 까먹고 있었다니,,,

유클리드 호제법의 증명 | GCD(a,b)=GCD(b,a%b)
유클리드 호제법이란? 유클리드 호제법은 a와 b의 최대공약수가 b와 a%b의 최대공약수와 같다 으로 정의할 수 있다. 다른 말로는 GCD( a,b ) = GCD( b, a%b ) 이다. 오늘은 이 공식을 증명해보자. int GCD(int
ddddewang.tistory.com
간략하게 유클리드 호제법을 증명하게 되면 (자세한 건 위의 다른 분이 증명해 주신 거 보시면 됩니다.)

'coding test > Baekjoon' 카테고리의 다른 글
| [Python] 2583번 영역 구하기 / DFS (0) | 2025.04.13 |
|---|---|
| [Python] 4963번 섬의 개수 / 재귀함수.ver (0) | 2025.04.08 |
| [Python] 1260번 DFS와 BFS (0) | 2025.02.24 |
| [Python] 16916번 부분 문자열 (0) | 2025.02.18 |
| [Python] 3085번 사탕게임 (0) | 2025.02.18 |