Oops, All Code!/🤯 Oops, My Algorithm!
♡̈ 17. 프로그래머스:: 최대공약수와 최소공배수
밍동망동
2024. 7. 13. 20:21
최대공약수를 구하는 방법은 몇 번 스쳐지나가듯 봤는데,
최소공배수에 대한 부분은 잘 알지 못했다.
그래서 우선 최대공약수와 최소공배수의 관계를 정의해보았다.
최대공약수와 최소공배수의 관계
최대공약수와 최소공배수를 구하는 방법을 이해했나요? 대부분의 경우에 최대공약수와 최소공배수는 소인수분해를 이용하는 방법으로 구해요. 이 방법은 초등학교 때 많이 해봤던 방법이니까
mathbang.net
정수론 (1) - 최대공약수, 최소공배수, 유클리드 호제법
안녕하세요, Dimen입니다! 오늘부터 정수론에 대한 글을 써보고자 합니다. 정수론은 정규 수학 교육과정에서 잘 다루지 않기 때문에 많은 분들에게 생소한 분야입니다. 그런 만큼 많은 분들에게
dimenchoi.tistory.com
최대공약수: 두 정수 a, b의 공통 약수
최소공배수: 두 정수 a, b의 공통 배수 중 가장 작은 값
최대공약수는 유클리드 호제법으로 구할 수 있다.
1. 정수 a를 b로 나눈 나머지 r을 구한다.
2. a = b, b = r로 갱신한다.
3. 나머지가 0이 될 때까지 반복한다.
최소공배수는 최대공약수를 활용해 구할 수 있다.
1. 정수 a, b를 곱한 mul을 구한다.
2. mul을 최대공약수로 나눈다.
이렇게 찾은 정수론으로 구하는 코드는 다음과 같다.
function solution(a, b) {
function gcd(x, y) {
while (y !== 0) {
let temp = y;
y = x % y;
x = temp;
}
return x;
}
function lcm(x, y, gcdValue) {
return (x * y) / gcdValue;
}
const gcdValue = gcd(a, b);
const lcmValue = lcm(a, b, gcdValue);
return [gcdValue, lcmValue];
}
그러다가 미친 코드를 봤다.
function gcdlcm(a, b) {
var r;
for(var ab= a*b;r = a % b;a = b, b = r){}
return [b, ab/b];
}
구현 로직은 똑같은데 더 간결한 코드다.
for문 내부에 실행 구문이 없다는 부분에서 큰 의의가 있다.
r = a % b
이 조건 검사절 때문인데, 0이 되면 알아서 종료되기 때문이다.
증감표현식에 두 개가 들어갈 수 있단 것도 처음 배웠다.