✏️ 문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
- 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
✏️ 문제 풀이
- 내 풀이
function solution(n, m) {
function range(min, max) {
let arr = [];
for (let i = min; i <= max; i++) {
arr.push(i);
}
return arr;
}
// 최대공약수 : the greatest common denominator(GCD)
function gcd(a, b) {
return !b ? a : gcd(b, a % b);
}
// 최소공배수 : the least common multiple(LCM)
function lcm(a,b) {
return (a * b) / gcd(a, b);
}
return [gcd(n, m), lcm(n,m)];
}
- 다른 풀이
function solution(n, m) {
let r;
for(var nm = n*m; r = n % m; n = m, m = r){}
return [m, nm/m];
}
(for문 안에 var를 let으로 바꾸면 nm이 선언되지 않아서 통과가 안된다. for문을 이렇게 쓰는 건 처음 봤는데 더 공부가 필요할 것 같다.)
어쨌든 유클리드 호제법을 쓰면 쉽게 구할 수 있다.
참고사이트
🙂 공부하며 정리하는 글입니다. 공감과 피드백 환영합니다.
'Algorithms > 코테 문풀' 카테고리의 다른 글
[프로그래머스] 같은 숫자는 싫어 - JavaScript / Array에서 중복값 제거 방법 정리 (0) | 2023.01.25 |
---|---|
[프로그래머스] 숫자의 표현 - JavaScript (0) | 2023.01.24 |
[프로그래머스]행렬의 덧셈 - JavaScript / 2중 for문, map() 풀이 (0) | 2023.01.23 |
[프로그래머스] 핸드폰 번호 가리기 - JavaScript / repeat(), fill(), 정규 표현식 풀이 (0) | 2023.01.21 |
[프로그래머스] JadenCase 문자열 만들기 - JavaScript / substring(), slice(), charAt() + 레거시(lagacy)란? (0) | 2023.01.20 |