Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 두 숫자의 최소공배수(LCM) 구하는 방법

이 글에서는 Java를 사용하여 두 숫자의 최소공배수(LCM)를 계산하는 방법을 알아봅니다. 최소공배수(Lowest Common Multiple, LCM)란 두 숫자 모두를 나머지 없이 정확히 나눌 수 있는 가장 작은 양의 정수를 의미합니다.

아래는 간단한 예시입니다.

입력

입력값이 다음과 같다고 가정해 보겠습니다.

24와 18

출력

원하는 출력 결과는 다음과 같습니다.

두 숫자의 LCM은 72입니다.

알고리즘

Step 1 - 시작
Step 2 - 세 개의 정수 변수 선언: input_1, input_2, lcm
Step 3 - 사용자에게 두 개의 정수 입력 요청 또는 값 하드코딩
Step 4 - 값을 읽어 들임
Step 5 - 1부터 두 입력값 중 큰 수까지 while 루프를 돌리며, 'i' 값이 두 입력값을 모두 나머지 없이 나누는지 확인
Step 6 - 해당 'i' 값을 두 숫자의 LCM으로 출력
Step 7 - 종료

예제 1: Scanner로 사용자 입력 받기

첫 번째 예제는 사용자가 직접 값을 입력하는 방식입니다. Scanner 객체를 통해 콘솔에서 두 개의 정수를 입력받은 후 LCM을 계산합니다.

import java.util.Scanner;
public class LCM {
   public static void main(String[] args) {
      int input_1 , input_2 , lcm;
      Scanner scanner = new Scanner(System.in);
      System.out.println("A scanner object has been defined ");
      System.out.println("Enter the first number: ");
      input_1 = scanner.nextInt();
      System.out.println("Enter the second number: ");
      input_2 = scanner.nextInt();
      lcm = (input_1 > input_2) ? input_1 : input_2;
      while(true) {
         if( lcm % input_1 == 0 && lcm % input_2 == 0 ) {
            System.out.printf("The LCM of %d and %d is %d.", input_1, input_2, lcm);
            break;
         }
         ++lcm;
       }
   }
}

출력 결과

A scanner object has been defined
Enter the first number:
24
Enter the second number:
18
The LCM of 24 and 18 is 72.

코드 설명

먼저 삼항 연산자((input_1 > input_2) ? input_1 : input_2)를 사용하여 두 수 중 더 큰 값을 초기 LCM 후보로 지정합니다. 이후 무한 루프를 돌면서 현재 값이 두 숫자를 모두 나누어떨어지게 하는지 검사하고, 조건을 만족하면 그 값을 LCM으로 출력한 뒤 반복문을 종료합니다. 만족하지 않으면 값을 1씩 증가시키며 계속 탐색합니다.

예제 2: 값이 미리 정의된 경우

두 번째 예제는 정수값이 코드에 미리 정의되어 있으며, 이 값을 읽어 콘솔에 출력하는 방식입니다.

public class LCM {
   public static void main(String[] args) {
      int input_1 , input_2 , lcm;
      input_1 = 24;
      input_2 = 18;
      System.out.println("The first number is " + input_1);
      System.out.println("The second number is " + input_2);
      lcm = (input_1 > input_2) ? input_1 : input_2;
      while(true) {
         if( lcm % input_1 == 0 && lcm % input_2 == 0 ) {
            System.out.printf("\nThe LCM of %d and %d is %d.", input_1, input_2, lcm);
            break;
         }
         ++lcm;
      }
   }
}

출력 결과

The first number is 24
The second number is 18
The LCM of 24 and 18 is 72.

마무리

이처럼 Java에서는 비교적 간단한 반복문 로직만으로도 두 숫자의 최소공배수를 손쉽게 구할 수 있습니다. 입력값의 범위가 크다면 유클리드 호제법(GCD 활용)을 적용하면 더 효율적으로 LCM을 계산할 수 있으니, 성능이 중요한 상황이라면 해당 방법도 함께 고려해 보시기 바랍니다.