HackerRank | Between Two Sets | Java

ay.zip·2021년 11월 23일
0

문제풀이

목록 보기
4/18

Between Two Sets

예를 들어,
a = [2,6]
b = [24,36]
이렇게 있다면, 이 4가지 element을 모두 완전히 나눠떨어지게 하는 숫자들을 구하면 된다.

위의 a,b를 완전히 나눠지게하는 숫자는 6,12 => 2개

例えば、
a = [2,6]
b = [24,36]
両方の配列の内にある数字を完全に割り切れるような数字を探して、その数字の個数を数える問題。

上のaとbが割り切れる数字は6、12→それで答えは2個

ーー

최대공약수(gcd)와 최소공배수(lcm)을 사용하는 문제!

gcd를 구하는 법

public static int gcd(int n1,int n2){
	if(n2==0){
    	  return n1;
         }
        return gcd(n1,n1%n2);
       }

lcm를 구하는 법

public static int lcm(int n1,int n2){
	if(n1==0 || n2==0){
    	  return 0;
         }else{
         	int gcd = gcd(n1,n2);
            return Math.abs(n1*n2)/gcd;
       }
}
        
    public static int getTotalX(List<Integer> a, List<Integer> b) {
 
        int cnt = 0;
        int lcm_elem = a.get(0);
        for(Integer elem_a : a){
            lcm_elem = lcm(lcm_elem,elem_a);
        }
        
        int gcd_elem = b.get(0);
        for(Integer elem_b : b){
            gcd_elem=gcd(gcd_elem,elem_b);
        }
        
        int elem_c = 0;
        while(elem_c<=gcd_elem){
            elem_c +=lcm_elem;
            
            if(gcd_elem%elem_c == 0){
                cnt++;
            }
        }
        return cnt;

    }

}

0개의 댓글