본문 바로가기
백준/1 - 5000

[백준] 2824번 : 최대공약수(JAVA)

by lms0806 2021. 7. 12.
728x90
반응형

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

 

2824번: 최대공약수

첫째 줄에 N이 주어진다.(1 ≤ N ≤ 1000) 둘째 줄에는 N개의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, N개의 수를 곱하면 A가 된다. 셋째 줄에 M이 주어진다.(1 ≤ M ≤ 1

www.acmicpc.net

 

풀이

수가 1,000,000,000보다 작다고 하여 BigInteger을 이용하여 풀었습니다.

 

처음 테스트케이스를 받고 그 수만큼 곱하여 N을 만들어줍니다.

두번째 테스트케이스를 받고 그 수만큼 곱하면 M을 만들어줍니다.

BigInteger의 최대공약수 만드는 명령어를 이용하여 N과 M의 최대 공약수를 String으로 받아줍니다.(특정 자리수까지만 출력해야 하므로)

String으로 받은 최대공약수의 길이가 9보다 길면 9이하로 substring 해줘 출력합니다.

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        
        int size = Integer.parseInt(br.readLine());
        
        BigInteger n = BigInteger.ONE, m = BigInteger.ONE;
        StringTokenizer st = new StringTokenizer(br.readLine());
        while(size --> 0) {
            n = n.multiply(new BigInteger(st.nextToken()));
        }
        
        size = Integer.parseInt(br.readLine());
        
        st = new StringTokenizer(br.readLine());
        while(size --> 0) {
            m = m.multiply(new BigInteger(st.nextToken()));
        }
        
        String gcd = n.gcd(m).toString();
                
        System.out.print(gcd.length() > 9 ? gcd.substring(gcd.length() - 9, gcd.length()) : gcd);
    }
}

 

728x90
반응형

댓글