728x90
반응형
728x90
반응형

문제는 다음과 같습니다.

https://www.acmicpc.net/problem/2609

1. 첫 번째 방법

import java.util.Scanner;

public class GCMLCMTestMain {
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in); 
    	System.out.print("첫 번째 수를 입력 : "); 
    	int a = sc.nextInt(); 
    	System.out.print("두 번째 수를 입력 : "); 
    	int b = sc.nextInt(); 
    	int aa = a;
    	int bb = b;
    	while(a!=0){ 
    		if(a<b){ 
    			int temp = a; 
    			a = b; 
    			b = temp; 
    		} 
    		System.out.println("a값 : "+ a + " b값 : "+ b);
    		a = a-b; 
    	} 
    	System.out.println("최대공약수: " + b);
    	System.out.println("최소공배수: " + aa*bb/b);
    }
         
}



2. 두 번째 방법

유클리드 호제법을 이용하였습니다.

유클리드 호제법[편집]

똑같이 두 수 192와 72의 최대공약수를 이번에는 호제법으로 구하여 보자. 일단 192을 72로 나누어 나머지를 구한다.

이는 192을 72로 나누어 나온 나머지가 48라는 것을 의미한다. 이번에는 72을 나머지인 48로 나눈다.

이와 같은 연산을 나머지가 0이 될 때까지 반복한다.

나머지가 0이 되었으므로 연산을 중지한다. 이때, 나머지가 0이 되기 바로 직전의 연산에서의 나머지가 원래 두 수의 최대공약수가 된다.



import java.util.Scanner;

public class GCMLCMTestMain {    
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in); 
    	System.out.print("첫 번째 수를 입력 : "); 
    	int a = sc.nextInt(); 
    	System.out.print("두 번째 수를 입력 : "); 
    	int b = sc.nextInt(); 
    	int aa = a;
    	int bb = b;
    	while(a>0){ 
    		if(a<b){ 
    			int temp = a; 
    			a = b; 
    			b = temp; 
    		} 
    		System.out.println("a값 : "+ a + " b값 : "+ b);
    		a = a%b; 
    	} 
    	System.out.println("최대공약수: " + b);
    	System.out.println("최소공배수: " + aa*bb/b);
    }
         
}


첫 번째 방법 보다는 두 번째 방법에서 콘솔에 출력되는 메시지가 적은 것을 알 수 있습니다.

메시지가 적다는 것은 프로그램을 실행하는 데 있어 리소스를 조금 덜? 잡아 먹는 다고 느꼈는데요.

출력이 되는 것도 중요하지만 출력의 과정 또한 중요하다고 생각하였습니다.

728x90
반응형
728x90
반응형

+ Recent posts