Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나 개발자 할래요

[JS] 최대공약수와 최소공배수 본문

개발자 되는 법.../코딩테스트...

[JS] 최대공약수와 최소공배수

개발_자 2024. 7. 3. 15:14

function solution(n, m) {
    var answer = [];
    let gcd = 1;
    for(let i = 2; i <= Math.min(n, m); i++) {
        if(n % i == 0 && m % i == 0) {
            gcd = i;
        }
    } answer = [gcd, n * m / gcd];
    return answer;
}

 

 

n과 m의 최대공약수(GCD), 최소공배수(LCM)

 

 

최대공약수(GCD) 찾기

 

`for` 루프는 `2`부터 `n`과 `m` 중 작은 값까지 반복

이는 `Math.min(n, m)`로 계산

반복문 내에서 `n`과 `m` 모두를 나눌 수 있는 `i`를 찾음

(`n % i == 0 && m % i == 0`)

만약 `i`가 `n`과 `m` 모두를 나눌 수 있다면, `gcd`를 `i`로 업데이트

이렇게 하면 `i`는 `n`과 `m`의 공약수 중 가장 큰 값

 

 

최소공배수(LCM) 계산:

 

최소공배수는 `n`과 `m`의 곱을 최대공약수로 나눈 값 (`n * m / gcd`)

 

 

 


 

 

 

다른 사람 풀이

 

 

 

유클리드 호제법을 이용한 GCD 계산:

 

`for` 루프는 조건 `r = a % b`가 참인 동안 반복

 

`a % b`는 `a`를 `b`로 나눈 나머지를 계산

`a % b`가 `0`이 될 때까지 반복

 

`a`는 `b`로 업데이트, `b`는 나머지 `r`로 업데이트

이 과정이 끝나면 `b`는 GCD를 갖게 됩니다.

 

'개발자 되는 법... > 코딩테스트...' 카테고리의 다른 글

[JS] 이상한 문자 만들기  (0) 2024.07.04
[JS] 3진법 뒤집기  (0) 2024.07.03
[JS] 직사각형 별 찍기  (0) 2024.07.02
[JS] 행렬의 덧셈  (0) 2024.07.02
[JS] 문자열 다루기 기본  (0) 2024.07.01