1658 : 최대공약수와최소공배수
문제
두개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력형식
입력 파일의 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력형식
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
입력
24 18
출력
6
72
코드
import java.util.Scanner;
public class J1658 {
//1658 : 최대공약수와최소공배수
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
sc.close();
// 둘 중 큰 수 골라주기
int bigger;
if (num1 > num2) {
bigger = num1;
} else {
bigger = num2;
}
// 최대공약수 구하기
int GCD = 0;
for (int i = 1; i <= bigger; i++) {
if (num1 % i == 0 && num2 % i == 0) {
// System.out.println(i); //i는 공약수
GCD = i;
}
}
System.out.println(GCD);
// 최소공배수 구하기
int LCM = 0;
for (int i = num2; i > 0; i--) {
for (int j = num1; j > 0; j--) {
if (num1 * i == num2 * j) { // num*i는 num1과 num2의 공배수
LCM = num1 * i;
// System.out.println(num1 * i); //num1과 num2의 공배수
}
}
}
System.out.println(LCM);
}
}
처음에 소수가 아닌 수들로 테스트하고 맞았구나 싶어서 제출했더니 60점을 맞았다.
그건 바로 최소공배수의 시작범위를 잘못 잡아서...
i=num1, j=num2로 하니 소수가 들어가면 무조건 0이 나왔다.
3 10 이면 3을 꼴랑 3만큼만 곱해주겠다고 설정해놓은 것이다.......
바보...
'알고리즘 공부 > 정올 문제풀이' 카테고리의 다른 글
[정올] 1309 : 팩토리얼 -(JAVA) (0) | 2022.09.02 |
---|---|
[정올] 1534 : 10진수를 2,8,16진수로 - (JAVA) (0) | 2022.09.02 |
[정올] 608 : 문자열2 - 자가진단7 (JAVA) (0) | 2022.09.01 |
[정올] 2604 : 그릇 -JAVA (3) | 2022.09.01 |