본문 바로가기
백준/코딩연습1

[백준] 최대공약수와 최소공배수 (2609)(java)

by 유줘니 2019. 5. 16.

원본 문제 : https://www.acmicpc.net/problem/2609

참고 풀이 : https://itpangpang.xyz/131

 

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

예제 입력 1

24 18

예제 출력 1

6

72

 

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int val1 = sc.nextInt();
		int val2 = sc.nextInt();

		int bigger = val1, smaller = val2;
	
		if(val1<val2) {		//입력 받은 두 수 중 큰 수를 bigger에 저장
			bigger = val2;
			smaller = val1;
		}
		
		int r = bigger*smaller;	//루프문의 조건을 만족하기 위해 r(나머지값)은 최대값
		while(r>0) {			//유클리드 호제법으로 최대공약수를 구함
			r = bigger % smaller;	//큰 수를 작은 수로 나눈 나머지값을 저장
			bigger = smaller;		//큰 수에 작은 수를 대입
			smaller = r;			//작은 수에 나머지 값을 대입
		}

		System.out.println(bigger);	//최대공약수 출력
		System.out.println((val1*val2)/bigger);	//최소공배수 출력
        //입력 받은 두 수를 곱한 뒤 최대공약수로 나누면 최소공배수가 됨
	}
}

 

 

 

 

 

 

 

'백준 > 코딩연습1' 카테고리의 다른 글

[백준] 수 정렬하기 (2750)(java)  (0) 2019.05.16
[백준] 두 수 비교하기 (1330)(java)  (0) 2019.05.16
[백준] 괄호 (9012)(java)  (0) 2019.05.15
[백준] 제로 (10773)(java)  (0) 2019.05.15
[백준] 스택 (10828)(java)  (0) 2019.05.15

댓글