Algorithm/Java

[알고리즘_Java] 백준 2702번 초6 수학 (최소공배수&최대공약수)

Cune 2022. 2. 28. 21:06

 


 

 

<풀이>

a=5, b=10이면

최대공약수는 둘중 작은수 a=5보다 작거나 같다

최소공배수눈 둘중 큰수 b=10보다 크거나 같다

import java.io.*;
import java.util.*;

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));

        int t = Integer.parseInt(br.readLine());


        for (int i = 0; i < t; i++) {
            String[] arr = br.readLine().split(" ");
            HashSet<Integer> hashSet = new HashSet<>();

            int a = Integer.parseInt(arr[0]);
            int b = Integer.parseInt(arr[1]);
            int min = Math.min(a,b);    //최대공약수는 둘중에 작은값보다 작거나 같다.
            int max = Math.max(a,b);    //최소공배수는 둘중에 큰값보다 크거나 같다.

            int gcd = 0;	//최대공약수
            int lcm = 0;	//최소공배수

            //최대공약수
            for (int j = min; j>0 ; j--) {	//초기값을 작은값으로 설정으로 하나씩 줄여감
                if(a%j==0 && b%j==0){	//두값모두 나눠지는 수가 최대 공약수 
                    gcd = j;
                    break;
                }
            }

            //최소공배수
            for (int j = max; j <= a*b; j++) {	//초기값을 큰값으로 설정하고 두값의 곱셈보다 작거나 같다
                if(j%a==0 && j%b==0){	//j값을 a,b 둘다 나눠지는 값이 최소공배수
                    lcm = j;
                    break;
                }
            }

            bw.write(lcm + " " + gcd + "\n");
        }

        bw.close();
   }
}

최대공약수와 최소공배수의 특성을 알고 초기값을 잡으니까 쉽게 풀 수 있었다...

그것도 모르고 for문 돌려서 풀때는 오류나고 갈피도 못잡아서 머리아프게 고생했다