728x90
📌 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요.
💡 나의 풀이
최대공약수와 최소공배수의 문제는 유클리드 호제법(Euclidean algorithm)
을 이용하면 간단하게 해결 할 수 있다.
유클리드 호제법(Euclidean algorithm)의 정의는 다음과 같다.
2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라고 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
다음 사진과 같은 과정을 거치면 손쉽게 최대공약수(GCD)
를 구할 수 있는데, 최대공배수(LCM)
는 처음 a * b
값에 GCD
로 나눠주면 된다.
이 문제의 팁을 작성하자면 최소공배수
를 구할 때 처음 입력받은 a
와 b
값이 필요하므로 다른곳에 저장했다가 나중에 사용하자. 그렇지 않으면, a
와 b
값이 바뀌게 된다.
또, 유클리드 호제법으로 문제를 풀 때는 a가 b보다 커야한다는 조건이 있으므로 a에는 max
값을, b에는 min
값을 주도록 하자.
# python 코드
def solution(a, b):
x, y = max(a, b), min(a, b)
while y:
x %= y
x, y = y, x
return [x, a*b // x]
// JS코드
function solution(a, b) {
let initA = a;
let initB = b;
while (b){
let r = a % b;
a = b;
b = r;
}
return [a, initA * initB / a]
}
반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
[ 파이썬(python) ] 프로그래머스 level1 - 비밀지도 (0) | 2021.04.07 |
---|---|
[ 자바스크립트(JS), 파이썬(python) ] 프로그래머스 level1 - x만큼 간격이 있는 n개의 숫자 (0) | 2021.04.05 |
[ 파이썬(python) ] 프로그래머스 level1 - 이상한 문자 만들기 (0) | 2021.04.02 |
[ 파이썬(python) ] 프로그래머스 level1 - 휴대폰 번호 가리기 (0) | 2021.04.02 |
[ 파이썬(python) ] 프로그래머스 level1 - 짝수와 홀수 (0) | 2021.04.01 |
댓글