⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
[Javascript] 프로그래머스 Level1 _ 최대공약수와 최소공배수
👇🏻문제링크
👇🏻
시행착오
( + 코드를 작성하면서든 생각들.)
1.
최대공약수와 최소공배수와의 관계를 잘 정리해놓은 블로그 글이 있어 참고했다.
최대공약수를 아래 for문으로 구성하던 중에 글을 읽게되어서 최소공배수를 구할 때 활용했다. (단, n>m)
최대공약수를 구하고나니 할 일이 다 끝나서 쉽게 통과할 수 있었다!
function solution(n, m) {
//Greatest common divisor : 최대공약수
//least common multiple : 최소공배수
var gcd, lcm;
var mod = 1;
for(let i=0; ; i++){
mod = m%(n/i);
if(mod==0) {
gcd = n/i;
lcm = n*m /gcd;
//최소공배수 : 최대공약수가 0이 아닌 두 수의 곱 / 최대 공약수
break;
}
}
return [gcd, lcm];
}
2.
최대공약수를 쉽게 구하기위해 사용한다는 '유클리드 호제법'
을 따라해보려고 위의 코드를 수정해봤다ㅎㅎㅎㅎ,,
👇🏻 '유클리드 호제법'
//a와 b의 최대공약수 구하기 (*단, a>b)
while(b>0){
var temp = b;
b = a % b;
a = temp;
}
return a;
예) a = 3, b =12
var temp = b; => 12; => 3;
b = 3%12; => 3; => 0
a = temp; => 12; => 3;
=> b가 0이어서 3을 리턴하고 종료.
예) a = 2, b =5
var temp = b; => 5; => 2; => 1;
b = 2%5; => 2; => 1; => 0;
a = temp; => 5; => 2; => 1;
=> b가 0이어서 1을 리턴하고 종료.
다른 풀이들을 보니까 함수로 분리해서도 풀길래
최대공약수, 최소공배수를 함수로 분리해서 함수의 결과를 리턴했다.
function solution(n, m) {
//Greatest common divisor : 최대공약수
function gcd(n,m){
while(m>0){
var temp = m;
m = n % m;
n = temp;
}return n;
}
//least common multiple : 최소공배수
function lcm(n,m){
return n*m / gcd(n,m);
}
return [gcd(n,m), lcm(n,m)];
}
다른 풀이들도 있었는데 아직은 이해하기가 너무 어려워서
다음 번에 다시 풀어봐야겠다!
'Programmers > Level 1' 카테고리의 다른 글
[Javascript] 프로그래머스 : 정수 내림차순으로 배치하기 (0) | 2021.07.02 |
---|---|
[Javascript] 프로그래머스 : 행렬덧셈 (0) | 2021.07.01 |
[Javascript] 프로그래머스 : 콜라스 추측 (0) | 2021.06.30 |
[Javascript] 프로그래머스 : 자릿수 더하기 (0) | 2021.06.30 |
[Javascript] 프로그래머스 : 제일 작은 수 제거하기 (0) | 2021.06.28 |