TIL

5월 31일 TIL - 최소공배수 = 두 수의 곱 / 최대공약수

양죠니 2023. 5. 31. 11:57

개인 플젝 진행 중이라 오늘 진행 중 있었던 오류들을 적으려다가 오늘 푼 코테문제도 정리하고 싶어 오늘 TIL 작성 두개 하려고 합니다..

 

주어진 두 수의 최대공약수, 최소공배수 구하기가 문제이고

접근 방식을 

1. 받아온 두 수 중에 작은 값 선별해서 별도의 min 변수에 넣어주고

2. 1부터 min (i가 1~min)까지 for문을 돌면서 

3. 받아온 두 수 모두 i로 나눈 나머지가 0인 값을 찾아 최대공약수를 찾고

4. 최대공배수는 받아온 두 수 중 큰 수 % 작은수 == 0 이면 작은수가 큰 수의 약수이니 최소공배수는 큰수이고, 큰수 % 작은수 != 0이면 큰수*작은수 를 해야 최소공배수를 구할 수 있다고 접근했다

 

접근방식 4번의 "큰수 % 작은수 != 0이면 큰수*작은수 => 최소공배수" 여기가 오류가 나서 구글링을 해보니

두 수의 최대공약수를 구하고 두 수의 곱에 구한 최대공약수를 나누면 최소공배수가 나온다는 사실을 알게 되었다. 

 

let min = n > m ? m : n // 두 수 중에 작은 값 min에 담기

입력받은 m과 n을 삼항연산자로 작은 값을 구해 min에 넣어주고

 

for (let i = 1; i <= min; i++) {
        if (n % i == 0 && m % i == 0) {
            x = i
        }
    }

for 문을 돌면서 두 수를 i로 나눈 나머지가 둘 다 0인 수, 즉 두 수의 약수를 찾아 x변수에 넣어주었다

for문을 다 돌고 나면 x에는 두 수의  최대공약수가 들어가있을 것이다

 

answer.push(x)
x = n * m / answer[0]
answer.push(x)
return answer

answer 배열에 최대공약수, 최소공배수를 push해서 return 하는게 조건이라 

최대공약수인 x 와 두 수를 곱한 값에 x를 나눠줘 최소공배수를 구해 answer 배열에 넣어주는 것으로 끝!

 

최소공배수 = 두 수의 곱 / 최대공약수 

잊지말기