프로그래머스

[프로그래머스/JAVA]코딩테스트 연습 > 연습문제 > N개의 최소공배수

chani1352 2025. 4. 4. 23:04

[문제 설명]

더보기

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

제한 사항

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

입출력 예

[간단 설명]

n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환

 

[접근 방법]

  1. 배열을 정렬하여 가장 큰 값을 max로 설정 (배열 내 최댓값 찾기).
  2. max가 1이면 그대로 반환 (배열 전체가 1로만 이루어진 경우).
  3. num = 2부터 시작하여 배열을 반복하면서 공통된 약수를 찾음.
  4. 배열을 순회하며 num으로 나누어 떨어지는 값이 있으면 answer에 num을 곱함.
  5. 나누어 떨어진 숫자는 arr[i] / num으로 업데이트하여 공통 약수를 제거함.
  6. 배열 내에서 num으로 나누어 떨어지는 값이 하나도 없으면 num++.
  7. num이 max까지 반복하여 공통된 약수를 모두 찾아 answer에 곱해줌.
  8. 반복문이 끝난 후 배열에 남아 있는 값들을 answer에 곱하여 반환.
 

[소스 코드]

import java.util.Arrays;
class Solution {
    public int solution(int[] arr) {
        int answer = 1;
        int num = 2;
        Arrays.sort(arr);
        int max = arr[arr.length -1];
        if(max == 1) return max;
        while(max >= num){
            boolean bool = false;
            for(int i = 0 ; i < arr.length ; i++){
                if(arr[i] % num == 0){
                    arr[i] = arr[i]/num;
                    bool = true;
                }
            }
            if(bool) answer *= num;
            else num++;
        }
        for(int i = 0 ; i < arr.length ; i++){
            answer *= arr[i];
        }
        return answer;
    }
}

 

[실행 결과]