유클리드 호제법 :
유클리드 호제법(Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a> b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
이번 문제를 풀기위해 고민하다 유클리드 호제법이라는 풀이 방법을 찾게 되었다.
이번 풀이에서는 유클리드 호제법을 코드로 바꾸어 진행해보았다.
#나의 풀이
function solution(n, m) {
let small, big;
n > m ? (big = n, small = m) : (big = m, small = n)
while(true){
if(big % small === 0){
break;
}
else{
let j = big;
big = small;
small = j % small;
}
}
return [small, n*m/small]
}
개인적으로 변수의 선언을 줄이고 싶었고, 좀 더 코드 라인수를 줄이고 싶은 욕심이 있었다.
#다른 풀이
function gcdlcm(a, b) {
var r;
for(var ab= a*b;r = a % b;a = b, b = r){}
return [b, ab/b];
}
후우 왜인지 for문을 생각하지 못했다.... (for문의 조건이 저런 식으로 들어갈 수 있는 것도 몰랐다.)
'코딩테스트 > Javascript' 카테고리의 다른 글
완주하지 못한 선수 (해시) (0) | 2021.06.11 |
---|---|
프로그래머스 스킬체크 레벨 1 (0) | 2021.05.13 |
정수 내림차순으로 배치하기 (0) | 2021.01.31 |
자릿수 더하기 (0) | 2021.01.24 |
자연수 뒤집어 배열로 만들기 (0) | 2021.01.23 |