백준_13241_최소공배수(자바)

정경훈·2024년 7월 1일
0

알고리즘

목록 보기
1/5

문제 링크 : https://www.acmicpc.net/problem/13241

문제

정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다.
예:

  • 10은 5의 배수이다 (5*2 = 10)
  • 10은 10의 배수이다(10*1 = 10)
  • 6은 1의 배수이다(1*6 = 6)
  • 20은 1, 2, 4,5,10,20의 배수이다.
    다른 예:
  • 2와 5의 최소공배수는 10이고, 그 이유는 2와 5보다 작은 공배수가 없기 때문이다.
  • 10과 20의 최소공배수는 20이다.
  • 5와 3의 최소공배수는 15이다.
    당신은 두 수에 대하여 최소공배수를 구하는 프로그램을 작성 하는 것이 목표이다.

입력

한 줄에 두 정수 A와 B가 공백으로 분리되어 주어진다.
50%의 입력 중 A와 B는 1000(103)보다 작다. 다른 50%의 입력은 1000보다 크고 100000000(108)보다 작다.
추가: 큰 수 입력에 대하여 변수를 64비트 정수로 선언하시오. C/C++에서는 long long int를 사용하고, Java에서는 long을 사용하시오.

포인트

AXB/최대공약수(r) = 최소공배수 공식 사용하기
최소공배수 결과가 int형으로 부족할 수 있으므로 결과는 long 타입 활용하기

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_13241_최소공배수 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        long A = Long.parseLong(st.nextToken());
        long B = Long.parseLong(st.nextToken());

        // A*B / GCD(최소공배수) = LCM
        long ans = 0;
        if(A > B){
            ans = A*B/(GCD(A,B));
        }else if(A < B){
            ans = A*B/(GCD(B,A));
        }else{
            ans = A;
        }

        System.out.println(ans);

    }
    // x가 y보다 큰 경우로 설정
    static long GCD(long x, long y){
        while(y != 0){
            long r = x%y;
            x = y;
            y = r;
        }
        return x;
    }
}

소감

쉬운 문제라 생각하여 접근하였으나 순간 최소공배수 공식이 생각나지 않아 잠깐 뻘쭘할뻔...

profile
뉴비 개발자...가 되고싶다..

0개의 댓글