처음 코딩을 시작할 때 최대공약수
를 구하는 문제를 푼적이 분명 있다.
2중 for
문을 활용해서 2수를 모두 나머지 0으로 나눌 수 있는 가장 큰 값을 구하는 방법이었을 것 이다. 하지만 만약 두 수의 크기가 엄청나게 크다면 O(N2)으로 문제를 해결할 수 없다.
일반적으로 코딩테스트에서 N의 크기가 1,000,000
이상이면 문제는 O(N2)으로 풀리지 않는다다. 그럴 때 유클리드 호제법
을 사용하면 O((logN)2)의 시간으로 풀 수 있다.
유클리드 호제법은 다행이도 굉장히 쉬운 알고리즘이다. 단순히 나눈값을 나머지로 나누기만 계속하면 되는 방법으로 예를들어,
10002
와 62
의 최대공약수를 구한다고 가정했을 때 다음과 같은 순서로 최대공약수를 구할 수 잇다.
10002
과 작은값 62
구하기10002 / 62 = 몫 + 20
62
을 나머지 20
로 나누기 62 / 20 = 몫 + 2
20
을 나머지 2
로 나누기 20 / 2 = 몫 + 0
최대공약수
이다function gcd(a, b){
// a가 b보다 큰 값이라고 가정
let temp;
while(b){
temp = a%b;
a = b;
b = temp;
}
return a;
}
https://school.programmers.co.kr/learn/courses/30/lessons/62048