https://school.programmers.co.kr/learn/courses/30/lessons/12940
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
- 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
해결 방법
최대공약수는 유클리드 호제법이라는 알고리즘을 이용하면 쉽게 해결할 수 있었다.
유클리드 호제법이란?
a가 b보다 클 때 a를 b로 나눴을 때 나머지를 r이라고 한다면 a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
그러면 b와 r의 최대공약수는 b를 r로 나눴을 때 나머지를 r2라고한다면 r과 r2의 최대공약수와 같다.
...
이런 식으로 진행하다가 나머지가 0이 됐을 때 나누는 수가 a와 b의 최대공약수가 된다.
a % b ... r
b % r ... r2
r % r2 ... r3
r2 % r3 ...0
a와 b의 최대공약수는 r3이 되는 것이다.
최소공배수는 'a * b / a와 b의 최대공약수' 이다.
전체 코드
function solution(n, m) {
let answer = [];
function eucli (a, b){
if(b === 0) return a;
return eucli(b, a % b);
}
const greatest = eucli(n,m);
const Least = (n * m) / greatest;
return [greatest, Least];
}
다른 해결 방안 코드
[프로그래머스] 최대공약수와 최소공배수 - JavaScript
Algorithm Problem with JavaScript — 4day두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면
velog.io
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JavaScript] 프로그래머스 level1 #시저암호 (0) | 2022.10.09 |
---|---|
[JavaScript] 프로그래머스 level1 #예산 (0) | 2022.10.08 |
[JavaScript] 프로그래머스 #문자열 다루기 기본 (0) | 2022.09.30 |
[JavaScript] 프로그래머스 탐욕법 #조이스틱 (0) | 2022.09.16 |
[JavaScript] 프로그래머스 완전탐색 #피로도 (0) | 2022.09.16 |