[programmers] Java Lv.2 - N개의 최소공배수

2025. 1. 7. 10:17·Algorithm Solving/Java

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

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

제한 사항
  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.
입출력 예

 

풀이

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        int[] arr = new int[]{2,6,8,14};

        // LCM : Least Common Multiple 최소공배수
        // GCD : Greatest Common Division 최대공약수

        int lcm = arr[0]; // 첫 번째 값을 기준으로 최소공배수 계산 시작
        for (int i = 1; i < arr.length; i++) {
            lcm = getLCM(lcm, arr[i]); // 현재 lcm과 다음 값을 기준으로 최소공배수 계산
        }
        System.out.println(lcm);
    }
    // 유클리드 호제법을 통한 최대공약수 구하기
    // A를 B로 나눈 몫을 q, 나머지를 r 이라고 할때 GCD(A,B) = GCD(B,r) 이다.
    public static int getGCD(int num1, int num2) {
        if (num1 % num2 == 0) return num2;
        return getGCD(num2, num1 % num2);
    }
    // 최소공배수 구하기
    // LCM(a,b) = (a*b) / GCD(a,b)
    public static int getLCM(int a, int b) {
        return (a * b) / getGCD(a, b);
    }
}

최대공약수(GCD)와 최소공배수(LCM)

n개의 수의 최소공배수를 구하기 위해서, 모든 원소를 반복적으로 최소공배수 갱신

  • LCM(a,b,c) = LCM(LCM(a,b),c)
  • LCM(a,b,c,d) = LCM(LCM(LCM(a,b), c), d)
  • ...

 

최대공약수 GCD

유클리드 호제법

  • 두 수의 나머지를 반복적으로 구해, 나머지가 0이 될 때 까지 나누는 수가 GCD

 

최소공배수 LCM

  • 두 수의 곱에서 GCD를 나눈 값이 LCM

 

 

참고 : https://velog.io/@os_js/%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C%ED%98%B8%EC%A0%9C%EB%B2%95

 

최대공약수/최소공배수(유클리드호제법)

최대공약수 최대공약수(GCD, Greateast Common Division) 텍스트두 수 이상의 여러 수의 공약수 중 최대인 수. 예를들면 10, 20, 30는 아래의 그림과 같이 소인수들의 곱으로 나타낼 수 있고, 공통된 소인수

velog.io

 

 

제출

class Solution {
    public int solution(int[] arr) {
        int lcm = arr[0]; // 첫 번째 값을 기준으로 최소공배수 계산 시작
        for (int i = 1; i < arr.length; i++) {
            lcm = getLCM(lcm, arr[i]); // 현재 lcm과 다음 값을 기준으로 최소공배수 계산
        }
        return lcm;
    }
    // 유클리드 호제법을 통한 최대공약수 구하기
    // A를 B로 나눈 몫을 q, 나머지를 r 이라고 할때 GCD(A,B) = GCD(B,r) 이다.
    public static int getGCD(int num1, int num2) {
        if (num1 % num2 == 0) return num2;
        return getGCD(num2, num1 % num2);
    }
    // 최소공배수 구하기
    // LCM(a,b) = (a*b) / GCD(a,b)
    public static int getLCM(int a, int b) {
        return (a * b) / getGCD(a, b);
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - 귤 고르기  (0) 2025.01.09
[programmers] Java Lv.2 - 멀리 뛰기  (0) 2025.01.08
[programmers] Java Lv.2 - 예상 대진표  (0) 2025.01.06
[programmers] Java Lv.2 - 카펫  (0) 2025.01.03
[BOJ] 백준 9095번 : 1, 2, 3 더하기 - Java  (0) 2025.01.02
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - 귤 고르기
  • [programmers] Java Lv.2 - 멀리 뛰기
  • [programmers] Java Lv.2 - 예상 대진표
  • [programmers] Java Lv.2 - 카펫
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    jwt
    java
    백트래킹
    프로그래머스
    mysql
    sql
    GROUP BY
    Firebase
    DFS
    시뮬레이션
    HTML
    BFS
    jpa
    그리디
    자료구조
    CSS
    greedy
    jQuery
    Google Fonts
    programmers
    다이나믹프로그래밍
    join
    백준
    BOJ
    Subquery
    dp
    websocket
    javascript
    완전탐색
    bootstrap
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - N개의 최소공배수
상단으로

티스토리툴바