공부하기/백준

[Java] 백준 풀기 5347 - LCM

XEV 2024. 2. 21. 23:41

자바 백준 5347번

실버 5

https://www.acmicpc.net/problem/5347

 

5347번: LCM

첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 정수론, 유클리드 호제법

 

 

 

 

 

코드 풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt(); // 테스트 케이스의 개수 입력
        sc.nextLine(); // 개행 문자 처리
        
        LCMCalculator lcmCalculator = new LCMCalculator(); // 최소공배수 계산을 위한 객체 생성
        
        // 테스트 케이스의 개수만큼 반복
        for (int i = 0; i < n; i++) {
            String[] input = sc.nextLine().split("\\s+");  // 입력을 공백을 기준으로 분리
            long a = Long.parseLong(input[0]);  // 첫 번째 수
            long b = Long.parseLong(input[1]);  // 두 번째 수
            long result = lcmCalculator.calculateLCM(a, b);  // 최소공배수 계산
            
            System.out.println(result); // 결과 출력
        }
    }
}

// 최소공배수 계산을 위한 클래스
class LCMCalculator {
    // 최소공배수 계산 메서드
    public long calculateLCM(long a, long b) {
        return (a * b) / gcd(a, b);  // 최소공배수는 두 수의 곱을 최대공약수로 나눈 값
    }
    
    // 최대공약수를 구하는 메서드
    private long gcd(long a, long b) {
        // 유클리드 호제법을 사용하여 최대공약수 계산
        while (b != 0) {
            long temp = a % b;
            a = b;
            b = temp;
        }
        return a;  // 최대공약수 반환
    }
}