알고리즘 공부/정올 문제풀이

[정올] 1658 : 최대공약수와최소공배수 - JAVA

송테이토 2022. 9. 1. 10:44

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만큼만 곱해주겠다고 설정해놓은 것이다.......

바보...