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

김동현·2022년 7월 4일

N개의 최소공배수 문제
https://programmers.co.kr/learn/courses/30/lessons/12953

문제설명

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

제한조건

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

입출력 예시

arrresult
[2,6,8,14]168
[1,2,3]6


내 코드

class Solution {
    int gcd(int a, int b) {
        if(a % b ==0) {
            return b;
        }
        return gcd(b, a%b);
    }

    public int solution(int[] arr) {
        int answer = arr[0];

        for(int i = 1; i < arr.length; i++){
            int num = gcd(answer, arr[i]);
            answer = answer * arr[i] / num;
        }
        return answer;
    }
}
  • 유클리드 호제법을 활용하여 gcd라는 함수를 만들어 입력받은 두 수의 최대공약수를 구해주었다.
  • 주어지는 수가 두가지 이상일 때 최소공배수 구하는 방법

ex) int[] arr = {2, 6, 8, 14}
1. 26의 최소공배수 -> 6
2. 2와 6의 최소공배수인 6과 다음 숫자인 8과의 최소 공배수 -> 24
3. 6과 8의 최소공배수인 24와 다음 숫자인 14의 최소 공배수 -> 168

알게된 점

  • 유클리드 호제법을 Java로 구현하는 여러 방법을 알게 되었다.
  // 반복문을 활용한 방법
  int gcd(int a, int b) { 
    while(b!=0) {
      int r=a%b;
      a=b;
      b=r;
    }
    return a;
  }
  // 재귀함수를 사용한 방법
  int GCD(int a, int b) { 
		if(a%b ==0) {
			return b;
		}
		return GCD(b, a%b);
	}
  • 이전까지 주어지는 수가 두 개일때 최소공배수를 구하는 방법은 알았지만 이번 문제를 통해 세 개 이상의 숫자가 주어져도 풀 수 있는 방법을 알게 되었다.
profile
오늘은 오늘

0개의 댓글