자바생
728x90

풀이 방법 1

두 수를 입력받아 두 수중 최대 최솟값을 구한다. 그래서 for문으로 1부터 최솟값까지 i로 나누어 둘 다 나머지가 0이 되는 것 중에 최댓값을 구한다. 이것이 최대공약수이다. 그리고 두 수를 곱하고 최대공약수로 나눈 것이 최소공배수가 된다.

 

사용 개념 1

최소 공배수 = 두 수 곱 / 최대 공약수

 

코드 1(유클리드 호제법 사용 X)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.*;
import java.util.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        
        int num1 = Integer.parseInt(st.nextToken());
        int num2 = Integer.parseInt(st.nextToken());
        int max_aliquot = Integer.MIN_VALUE;
        int max = (num1 >= num2) ? num1 : num2;
        int min = (num1 >= num2) ? num2 : num1;
        
        for(int i = 1; i <= min; i++){
            if(max % i == 0 && min % i == 0)
                if(i > max_aliquot)
                    max_aliquot = i;
        }
        sb.append(max_aliquot + "\n");
        int min_multiple = num1 * num2 / max_aliquot;
        sb.append(min_multiple + "\n");
        System.out.print(sb);
    }
}
cs

 

 

 

풀이 방법 2

두 수를 입력받아 두 수중 최대 최솟값을 구한다. 그래서 gcd메소드를 호출하고, gcd메소드는 유클리드 호제법을 사용하여 최대공약수를 구한다. 그리고 풀이 방법 1과 비슷하게 최소 공배수는 두 수 곱 / 최대공약수로 구한다.

 

사용 개념 1

유클리드 호제법

 

코드 1(유클리드 호제법 사용 O)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.*;
import java.util.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        
        int num1 = Integer.parseInt(st.nextToken());
        int num2 = Integer.parseInt(st.nextToken());
        
        int max = (num1 >= num2) ? num1 : num2;
        int min = (num1 >= num2) ? num2 : num1;
        
        int result1 = gcd(max,min);
        int result2 = max * min / result1;
        
        sb.append(result1 + "\n" + result2);
        System.out.print(sb);
    }
    static int gcd(int max, int min){
        while(min != 0){
            int temp = max % min;
            max = min;
            min = temp;
        }
        return max;
    }
}
cs
728x90

'BOJ(Java)' 카테고리의 다른 글

자바(백준) 14889 스타트와 링크  (0) 2021.04.29
자바(백준) 9663 N-Queen  (0) 2021.04.27
자바(백준) 1929 소수 구하기  (0) 2021.04.26
자바(백준) 1978 소수 찾기  (0) 2021.04.26
자바(백준) 1037 약수  (0) 2021.04.26
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그