ss 프로그래머스 1단계 : 최대공약수와 최소공배수
본문 바로가기
알고리즘

프로그래머스 1단계 : 최대공약수와 최소공배수

by 꿈나무개발 2022. 12. 1.
728x90

프로그래머스 1단계 : 최대공약수와 최소공배수

📝 문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

👉 제한 사항

- 두 수는 1이상 1000000이하의 자연수입니다.

👉 입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]

✌️ 나의 풀이

for문을 돌려서 n과 m에 모두 나누어 떨어지는 최대공약수를 구하고 먼저 answer에 저장합니다. 그리고 최소공배수를 수해서 push()로 answer에 저장합니다.
function solution(n, m) {
    let answer = [];
    let a = 0
    for(let i=1; i<=n; i++){
        if( n % i === 0 && m % i === 0 ){
            answer = [i]
            a = Math.max(n * m / i)
        }
    }
    answer.push(a)
    return answer
}

👍 다른 풀이

for문을 이렇게도 쓸 수 있다는걸 처음 알았습니다. 유클리드호제법을 이용한거라고 하는데요.
유클리드 호제법 : 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다.
function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}
728x90
반응형

댓글


HTML
CSS
JAVASCRIPT

JAVASCRIPT

자세히보기
광고 준비중입니다.