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

최하온·2024년 2월 5일
0

TIL

목록 보기
30/71
post-thumbnail

🚨Issue occuring


💦What I tried


접근 방법

문제 해석 : 두 수의 [최대 공약수,최소공배수] 담기
1. 최대공약수(gcd),최소공배수(lcm) 구하기

  • gcd = 두 수가 다 나누어 떨어지기
  • lcm = 두 수의 곱을 최대공약수로 나누기
  1. gcd,lcm push하기

  1. 최대 공약수 구하기
if (n % i === 0 && m % i === 0) {
      gcd.push(i);
    }

이렇게 하니 모든 공약수가 push되어 shift 해야하는 번거로움이 발생.

  1. 최소공배수 구하기
lcm = n * m / gcd;

두 수의 곱에 최대 공약수를 나누면 최소 공배수가 된다.

💡How solve issue


최대 공약수 구하기

if (n % i === 0 && m % i === 0) {
      gcd = (i);
    }

n과 m 모두 나누어 떨어지는 숫자가 공약수 이므로 마지막 공약수만 넣기 위해 = 사용하면 되었음.

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

📃What I learned new


최대 공약수와 공배수를 구하는 방법을 한 번 더 배웠다.

다른 사람의 코드

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}

유클리드호제법을 사용한 코드인데 변수 ab에 a*b를(상당히 직관적이다), r= a%b 로 a와 b를 나머지를 계산, 값을 업데이트 하기위해 a는 b를 할당 b는 r을 할당함.
a%b=r, b%r, b%r... 반복하였을 때 나머지가 0이 된다면 마지막 b가 최대공약수가 됨.
a=10, b=12 라면
10%12=10
12%10=2
10%2=0 // 나머지가 0이므로 2가 최대 공약수가 됨.

🤔Realization


해당 식을 알고 있지만 이용을 하는건 다른 개념의 문제인 거 같다.
생각하는 힘이 부족한 거 같다.

0개의 댓글