N개의 최소공배수 (level2)

원용현·2022년 9월 15일
0

프로그래머스

목록 보기
16/49

링크

https://school.programmers.co.kr/learn/courses/30/lessons/12953

문제

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미한다. 최소공배수의 의미를 확장하여 입력된 모든 숫자의 배수 중에 공통이 되는 가장 작은 숫자를 찾으라.

예제로 이해

주어지는 숫자가 [2, 4, 6, 8] 일 때, 최소공배수는 2 x 2 x 2 x 3 = 24 이다.

이것을 코드로 작성하는 방법은 2부터 주어지는 숫자 중에서 가장 큰 수까지 1씩 증가시키며 각 요소를 나누었을 때 나누어 떨어지는 경우에 답에 해당 숫자를 곱해준다. 이때 2로 한번 나누어 떨어졌다고헤서 다음 숫자인 3으로 넘어가는 것이 아니라 다시 2로 나누어보며 나누어 떨어지지 않을 때 다음 숫자로 넘어가도록 한다. (2로 한번 나누어져도 다시 2로 나누어질 수 있기 때문에 다시 한 번 나누어준다.)

코드

function solution(arr) {
    let result = 1
    let ok = false
    let repeat = Math.max(...arr)
    
    for(let i = 2; i <= repeat; ) {
        arr.map((el, index) => {
            if(el % i === 0) {
                arr[index] =  el / i
                ok = true
            }
        })
        if(ok) {
            result *= i
            ok = false
        } else {
            i++
        }
    }

    return result;
}

코드 풀이

배열의 가장 큰 수의 크기만큼 반복되는 for문을 작성한다.

반복문의 내부에는 2부터 시작하는 변수를 선언하고 1씩 증가하며 배열의 각 요소와 나머지 연산을 진행한다. 나머지 연산의 결과가 0이 되면, 배열에서 해당 요소를 변수로 나누어주고, 최소공배수 결과값에 해당 값을 곱해준다. 이후에 나머지 연산을 위한 변수를 +1 해주지 않고 다시 해당 값으로 나머지 연산을 진행한다. 어떤 수를 곱해서 만드는데 같은 수가 여러 번 반복되어 구성될 수 있기 때문에 나누어지지 않는 경우가 발생할 때 까지 같은 숫자로 나머지 연산을 반복하여 검증하도록 한다.

배열의 요소들이 나누어지지 않는 경우에는 반복문의 나누어줄 변수를 +1을 진행하여 다음 숫자로 비교할 수 있게 한다.

모든 반복이 완료되면 결과값을 반환한다.

0개의 댓글