알고리즘/백준

공부 94일차: 백준 2609번 최대공약수와 최소공배수 자바 java

김발자~ 2022. 11. 1. 23:22
반응형

2609 최대공약수와 최소공배수

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

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 

 

 


백준 2609번 문제 최대공약수와 최소공배수


문제


 

 

 

 


과정 생각해보기


 

두 숫자 모두 소인수분해한 뒤 최소공배수와 최대공약수를 구해보려고 했는데..

두 숫자가 공통으로 가지는 소인수를 구하려면 또 ArrayList같은 곳에 저장하고 같은지 비교해야 하는데 

그러면 시간이 너무 오래 걸릴 것 같았다

 

그래서 백준 문제에서 알고리즘 분류를 눌러보니 '유클리드 호제법'이라는 게 있어서 찾아보았다

알고리즘을 제대로 공부한다면 꼭 만나게 되는 개념인 듯했다

 

https://gimbalja.tistory.com/410

 

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

최대공약수와 최소공배수를 구하는 알고리즘이다 방법은 아래와 같다 (출처) 입력으로 두 수 m,n(m>n)이 들어온다. n이 0이라면, m을 출력하고 알고리즘을 종료한다. m이 n으로 나누어 떨어지면, n을

gimbalja.tistory.com

여기에 정리해두었다

 

 

 


정답 인정 코드


 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
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());
        
        int first = Integer.parseInt(st.nextToken());
        int second = Integer.parseInt(st.nextToken());
 
        //유클리드 호제법
        int gcd = gcd(first, second);
        int lcm = first * second / gcd;
        System.out.println(gcd);
        System.out.println(lcm);
    }
 
    public static int gcd(int x, int y) {
        if(y == 0)
            return x;
        else
            return gcd(y, x%y);
    }
}
 
cs

 

특정 알고리즘이 유명하다는 건, 남들도 다 알고 있다는 뜻일 것이다

외워두기!

 

 

 


 

반응형