[Programmers] N개의 최소공배수 - JavaScript

Joosi_Cool·2023년 2월 9일
0

Programmers

목록 보기
9/98
post-thumbnail

문제설명



설계 과정

본인은 우선 약수의 개수에 대한 배열을 하나 파놓고 시작했다.
1. 제일 큰 수 구하기
2. 제일 큰 수의 크기를 가지는 배열 생성한 후, 요소값 0으로 선언 -> divArr
-> 이 배열이 약수의 개수를 구해줌 ex) 인덱스가 2인 값은 2로 얼마나 나눠지는지에 대한 값
3. 입력값 arr 을 하나씩 체크
-> arr 이 나누려는 값으로 얼만큼 나눠지는지 count 값을 구한 후, 그 count를 divArr의 개수와 비교해서 크다면 이걸로 바꿈
4. 마지막에 이 약수의 개수를 가지고, 인덱스를 그 값만큼 곱해서 답을 구함
-> 예를 들어 인덱스 3값에 4개이다. answer에 3을 4번 곱한다는 뜻



풀이 코드

function solution(arr) {
    var answer = 1;
    var maxNum = Math.max(...arr);
    var divArr = new Array(maxNum+1).fill(0);
   
    // 최대 약수 구하기
    for(var arrIndex = 0;arrIndex<arr.length;arrIndex++){
        for(var i = 2; i<=arr[arrIndex];i++){
            var divCount = 0;
            while(true){
                if(arr[arrIndex]%i===0){
                    arr[arrIndex] = arr[arrIndex] / i;
                    divCount++
                }
                else{
                    if(divCount>divArr[i]) divArr[i] = divCount;
                    break;
                }
            }
        }
    }

    //구한 약수 최소공배수에 곱하기
    for(var i =1;i<divArr.length;i++){
        for(var mul = 0; mul<divArr[i];mul++){
            answer *= i;
        }
    } 
    return answer;
}


결과

profile
집돌이 FE개발자의 노트

0개의 댓글