Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

9시 24분

최대공약수를 구하는 3가지 방법 본문

알고리즘

최대공약수를 구하는 3가지 방법

leeeee.yeon 2021. 6. 25. 22:59

https://mk28.tistory.com/193 참고

 

1) [1, min(a, b)] 범위에서 두 수 모두의 약수가 되는 값 중 최댓값을 구하는 방법

  • 시간복잡도 O(min(a,b)), 시간초과가 발생하기 쉬움

 

2) 역순 탐색 - [1, min(a, b)]부터 1까지 역순으로 탐색하여 가장 처음 발견된 공약수가 결국 최대 공약수가 됨

  • 1번 방법을 역순으로 진행하고, 공약수가 발견되면 break하는 방법으로 구현
  • 1번보다는 빠르겠지만 최악의 경우 모든 수를 검사함
  • 1번과 동일한 시간 복잡도

 

3) 유클리드 호제법

f(a, b) = gcd(a, b)라 하자.

이 때 a mod b = 0 이라면, f(a, b) = b임이 자명.

이 때 a mod b이 0이 아닌 경우, f(a, b) = f(b, a mod b)가 성립한다. 

이를 유클리드 호제법이라고 함

  • 반복문이나 재귀 함수를 이용하여 구현
  • 정수 a와 b에 대하여 근사적으로 O(log2(min(a,b)))의 시간복잡도를 가짐

 


이제까지 1번 방법으로 gcd를 구했는데, 백준 9613번을 풀며 내 방식이 시간 초과가 나기 쉬운 방법임을 깨달았다 ...!

유클리드 호제법을 익혀서 유클리드 호제법으로 gcd 문제를 풀자 !!

'알고리즘' 카테고리의 다른 글

백준 1463번: 1로 만들기  (0) 2022.01.07
프로그래머스 - 짝지어 제거하기  (0) 2021.09.07
DFS/BFS  (0) 2021.06.25
구현  (0) 2021.06.21
그리디  (0) 2021.06.18