N개의 최소공배수 (javascript)

임병욱·2023년 11월 23일
0

algorithm

목록 보기
18/31

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한 사항

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

입출력 예

내 풀이

function 최소공배수(a, b) {
    if (b % a === 0) return b
    let c = b % a
    while (a % c) {
        c = a % c
    }

    return a * b / c
}

function solution(arr) {
    arr.sort((a, b) => a - b)
    while (arr.length >= 2) {
        let b = arr.pop();
        let a = arr.pop();
        arr.push(최소공배수(a, b))
    }

   return arr[0]
}

회고

  1. 배열을 오름차순 시킨 뒤, 뒤에서부터 최소공배수를 구하는 방식으로 코드를 작성했다.
  2. 최소공배수를 구하는 과정이 나에겐 어려웠다. b > a이고 b를 a로 나눈 나머지가 0이라면 b가 최소공배수가 된다.
    b를 a로 나눈 나머지가 0이 아니라면 b를 a로 나눈 나머지인 c를 구하고 c를 a로 계속 나누면서 나머지가 0일 때까지 구해주면 된다. 이때, c는 a, b의 최대공약수가 된다.
  3. 그 다음 최대 공약수인 c를 a * b한 값에 나눠주면 된다.
  4. 뭔가 코드를 외운듯한 내용이라 잘 와닿지는 않는다..
profile
안녕하세여

0개의 댓글