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

hyeok ryu·2024년 5월 21일
0

문제풀이

목록 보기
134/154

문제

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


입력

  • n개의 숫자를 담은 배열 arr

출력

  • 수들의 최소공배수를 반환

풀이

제한조건

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

접근방법

단순 계산
여러개의 수들에 대해서 최소 공배수를 구하는 방식은 크게 2가지 있다.
1. 공약수와 몫을 이용하는 방식
2. 최대값을 n배하며 모든 수로 나누어 지는지 확인하는 방식

1. 공약수와 몫을 이용하는 방식

1번 방식의 경우는 아래와 같다.
두 수의 최소 공배수를 과정으로 생각해보자

3x3x5x7로 구할 수 있다.
즉 모든 수를 공통적으로 나눌 수 있는 3x3과 마지막 몫인 5와 7을 곱하면 된다.

n개의 수가 있는경우에도 동일하게 접근하면 된다.

2. 최대값을 n배하며 모든 수로 나누어 지는지 확인하는 방식
최소 공배수라는 것이 생각해보면 결국 N개의 수의 배수이다.
따라서 N개 중 1개의 수를 K배 하다보면 언젠가 최소 공배수가 반드시 나온다.
이때, 최소값을 기준으로 한다면 연산의 수가 많아진다. 최대값을 기준으로 찾아보자.


코드

import java.util.*;
class Solution {
    int max;
    public int solution(int[] arr) {
        Arrays.sort(arr);
        max = arr[arr.length - 1];
        int weight = 1;
        while(true){
            int target = max * weight;
            if(isOkay(max * weight, arr))
                return max * weight;
            weight++;
        }
    }
    public boolean isOkay(int target, int[] arr){
        for(int value : arr){
            if(target % value != 0)
                return false;
        }
        return true;
    }
}

0개의 댓글