문제 해석
- 두 자연수 A와 B를 입력받아서 최소공배수를 구하면 되는 문제이다.
- 단, 50%의 입력 중 A와 B는 1000(10³)보다 작다. 다른 50%의 입력은 1000보다 크고 100000000(10⁸)보다 작기 때문에 최대 공배수를 구할 때 AxB/최대공약수 의 공식을 사용하는데 int를 그대로 쓰면 에러가 날 수 있다.
- 따라서, long을 써야 한다.
코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
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 = new StringTokenizer(br.readLine());
long A = Integer.parseInt(st.nextToken());
long B = Integer.parseInt(st.nextToken());
br.close();
if(A > B){
bw.write(A*B/findGCD(A, B) + "\n");
}else if(A < B){
bw.write(A*B/findGCD(B, A) + "\n");
}else{
bw.write(A + "\n");
}
bw.flush();
bw.close();
}
static long findGCD(long A, long B){
while(B != 0){
long R = A%B;
A = B;
B = R;
}
return A;
}
}
결과
느낀 점
- 확실히 전에 최소공배수와 최대공약수 구하는 알고리즘에 대해 이해를 하고 이 문제를 직면해서 큰 어려움이 없었다.