와챠의 우당탕탕 코딩 일기장
[백준]정수론 및 조합론/최소공배수/1934 풀이 JAVA 본문
반응형
문제
두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다.
이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다.
예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다.
두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다.
둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000)
출력
첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다.
풀이(JAVA)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.StringTokenizer; | |
public class Main { | |
// 유클리드 호제법으로 최대 공약수 구하기(Greatest Common Divisor) | |
/* 1단계, a > b | |
* 2단계, r = a % b | |
* 3단계, 만약 r = 0이면 최대 공약수 = b | |
* 4단계, r = 0이 아니면 a = b, b = r로 바꾸고 3단계 반복 | |
* */ | |
public static long getGCD(long a, long b) { | |
long r = a % b; // 2단계, r = a % b | |
// 4단계, r = 0이 아니면 a = b, b = r로 바꾸고 3단계 반복 | |
while (r > 0) { // 3단계, 만약 r = 0이면 최대 공약수 = b | |
a = b; | |
b = r; | |
r = a % b; | |
} | |
return b; | |
} | |
// 유클리드 호제법으로 최소 공배수 구라기(Least Common Multiple) | |
// a * b / 최대 공배수 | |
public static long getLCM(long a, long b, long gcd) { | |
return (a * b) / gcd; | |
} | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
StringTokenizer st; | |
// 테스트 케이스 입력 | |
int T = Integer.parseInt(br.readLine()); | |
for (int i = 0; i < T; i++) { | |
st = new StringTokenizer(br.readLine()); | |
long a = Long.parseLong(st.nextToken()); | |
long b = Long.parseLong(st.nextToken()); | |
// 최대 공약수 구하기 | |
long gcd = getGCD(Math.max(a, b), Math.min(a, b)); // 1단계, a > b | |
// 최소 공배수 구하기 | |
long lcm = getLCM(a, b, gcd); | |
// 출력 | |
bw.write(lcm + "\n"); | |
} | |
bw.flush(); | |
bw.close(); | |
br.close(); | |
} | |
} |

반응형
'코딩 일기장 > 백준' 카테고리의 다른 글
[백준]스택/제로/10773 풀이 JAVA (0) | 2021.02.18 |
---|---|
[백준]스택/스택/10828 풀이 JAVA (0) | 2021.02.18 |
[백준]정수론 및 조합론/최대공약수와 최소공배수/2609 풀이 JAVA (0) | 2021.02.16 |
[백준]정수론 및 조합론/약수/1037 풀이 JAVA (0) | 2021.02.16 |
[백준]정수론 및 조합론/배수와 약수/5086 풀이 JAVA (0) | 2021.02.16 |
Comments