※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)
[브론즈 1] 2609. 최대공약수와 최소공배수 (Java)
J 크
2023. 8. 1. 11:41
728x90
반응형
https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
금주는 수학 문제 관련된 알고리즘을 주로 풀이를 진행할 예정입니다!
※ 문제를 요약하면 아래와 같습니다.
▶ 두 수가 입력 되면 최대공약수와 최소공배수를 출력합니다.
◈ Input
24 18
◈ Output
6
72
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 최대 공약수는 유클리드 호제법 구현. ( 저는 아래 위키에서 예시만 보고 직접 코드로 구현 해보았습니다! )
( Ref : https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95 )
▶ 최소공배수 = 두 수의 곱 / 최대공약수 형태로 구현.
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 {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bReader.readLine());
int nFirstNum = Integer.parseInt(st.nextToken());
int nSecondNum = Integer.parseInt(st.nextToken());
int nMul = nFirstNum * nSecondNum;
// 최대 공약수는 나머지가 0이 될 때 까지.
int nRemainder = 0;
while(nSecondNum > 0) {
nRemainder = nFirstNum % nSecondNum;
nFirstNum = nSecondNum;
nSecondNum = nRemainder;
}
// 최대 공약수
// GCL is stands for Greatest Common divisor
int nGCL = nFirstNum;
// 최소 공배수
// 최소 공배수 = 두 수의 곱 / 최대 공약수.
// LCM is stands for Least Common Multiple
int nLCM = nMul / nGCL;
System.out.println(nGCL);
System.out.println(nLCM);
}
}
읽어주셔서 감사합니다!
Good Luck! (피드백 고맙습니다)