문제 2609번
[입력]
: 첫째 줄에는 두 개의 자연수
[출력]
: 첫째 줄에는 두 수의 최대공약수 출력
둘째 줄에는 두 수의 최소 공배수 출력
[팁]
: 최대공약수와 최소공배수는 유클리드 호제법을 이용한다
<유클리드 호제법>
- 최대공약수 = GCD
- A와 B의 최대공약수를 (A,B)라고 할 때 최대공약수 (B,R)의 최대공약수와 같다
- A, B ∋ A ≥ B ) (
- R = A를 B로 나눈 나머지
- GCD(A,B) = GCD(B,R)
- 최소공배수 = LCM
- A와 B의 최소공배수는 GCD × (A/GCD) × (B/GCD) = (A×B) / GCD

[코드]
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());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int G = gcd(A,B);
System.out.println(G);
System.out.println(A*B/G);
}
public static int gcd (int A, int B){
if(B==0)
return A;
else
return gcd(B,A%B);
}
}
[해설]
: StringTokenizer st = new StringTokenizer(br.readLine()); 첫번째 입력줄을 공백단위로 읽어온다
: int A = Integer.parseInt(st.nextToken()); 입력 받은 숫자 A, B
int B = Integer.parseInt(st.nextToken());
: int G = gcd(A,B); 최대공약수
: System.out.println(G); 최대공약수 출력
: System.out.println(A*B/G); 최소공배수 출력
: public static int gcd (int A, int B){ 매번 갱신되는 gcd 정의
if(B==0)
return A; B값이 0이 되면 A 호출 ( = A가 최대공약수 G가 된다 )
else
return gcd(B,A%B); B값이 0이 아니라면 B를 (A자리)로 데려오고
} A를 B로 나눈 나머지를 (B자리)에 대입
이제 풀어보러 갈께요 :)

https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *
'Baekjoon > [2] 수학' 카테고리의 다른 글
[백준] 4134번 다음 소수 JAVA (자바) 풀이 (0) | 2024.05.09 |
---|---|
[백준] 1057번 토너먼트 JAVA (자바) 풀이 (0) | 2024.04.16 |
[백준] 1078번 소수 찾기 JAVA (자바) 풀이 (0) | 2023.08.25 |
[백준] 1934번 최소공배수 JAVA (자바) 풀이 (0) | 2023.08.19 |
[백준] 10430번 나머지 JAVA (자바) 풀이 (0) | 2023.08.18 |