부트캠프 코테를 준비하며..
알고리즘 위주의 수업이었던 C++과 파이썬 수업에서도
항상 스스로 코드를 짜는 게 아닌, 다른 사람들의 코드를 이해하고, 외웠던 나는
사실 Lv.1 문제도 심혈을 기울이는 초보 개발자 지망생이었다..😳
따라서 블로그엔, 내가 직접 짜고 다른 사람에게 설명해줄 수 있는 코드만 적어나가기로 다짐했다.
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
내 풀이
사용한 메서드는 다음과 같다.
Number.isInteger: 주어진 값이 정수인지 판별하는 메서드
function solution(n, m) {
var answer = [];
let Upper = 0;
let Lower = 0;
let bigger = 0;
for(let i=0; i<=n; i++){
if (Number.isInteger(n / i) == true && Number.isInteger(m / i) == true)
Upper = i;
}
Lower = Upper * (n/Upper) * (m /Upper)
answer.push(Upper);
answer.push(Lower);
return answer;
}
최대 공약수는 어떤 약수를 나누어 떨어지게 하는 정수 중 가장 큰 수다.
따라서, n과 m을 같은 숫자로 나누면서, Number.isInteger 메서드를 통해 정수인지, 확인하고 모두 true가 나오는 가장 큰 숫자를 Upper에 저장한다.
최소 공약수의 경우 다음 그림과 같이, 최대 공약수, n을 최대 공약수로 나눈 몫, m을 최대 공약수로 나눈 몫을 곱한 값이므로 Lower에 해당 값을 넣어준다.