[프로그래머스] N개의 최소공배수

정호·2023년 8월 4일
0

문제 풀이

목록 보기
39/60

문제 링크

1️⃣ 문제 설명

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


2️⃣ 제한 사항

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

3️⃣ 입출력 예

4️⃣ 나의 풀이

function solution(arr) {
    let answer = 0;
    let n = 1, flag = false;
    while(!flag)
    {
        n++;
        for(let i = 1; i < arr.length; ++i){
            if((arr[0] * n) % arr[i]  === 0){
                flag = true;
            } else {
                flag = false;
                break;
            }
        }
    }
    
    answer = arr[0] * n;
    return answer;
}

첫번째 풀이

  • 한 숫자를 계속 곱해주고, 나눈 나머지의 값이 모두 0으로 떨어질때
  • 모든 값의 최소공배수가 구해진다.

다시 풀기

function solution(arr) {
    let r, m, n = 0;
    return arr.sort((a,b) => b - a).reduce((acc, cur) => {
        m = acc;
        n = cur;
        while(0 < n){
            r = m % n;
            m = n;
            n = r;
        }
        return acc * cur / m;
    });;
}

두번째 풀이
처음 풀이에서 효율성을 향상시켜 다시 풀어봤다.

  • 리듀스 함수를 응용한 풀이

📃 다른 사람의 풀이

function solution(arr) {
    return arr.reduce((acc, cur) => {
        const recursive = (min, max) =>{
          return (min % max) === 0 ? max : recursive(max, min % max);
        }

        let max = 0;
        return acc*cur / recursive(acc,cur);
    });
}

비슷한 방법이지만 훨씬 가독성이 좋은 코드라 참고하면 좋을 거 같다.

profile
열심히 기록할 예정🙃

0개의 댓글