https://www.hackerrank.com/challenges/between-two-sets/problem



이 문젠데


3 2

2 3 6

42 84


테스트케이스에 저렇게 집어넣으면 타임아웃뜨거든


최대공약수 구하는 로직이 문제가 있는거같은데 도움좀.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
    static int getTotalX(int[] a, int[] b) {
        /*
         * Write your code here.
         */
        
         int maxA = a[0]; //최대값
        int minB = b[0]; //최소값
        int maxB = b[0];
        int gcm = a[0]; //최대공약수
        int lcm = a[0]; //최소공배수
        int sizeA = a.length;
        int sizeB = b.length;
        int bigTemp = a[0];
        int count = 0;
        int idx = 1;
        
        
        int v1 = 0;
        int v2 = 0;
        int vtemp = 0;
        int nam = 1;
        
        for(int i=0; i<sizeA-1; i++){
          if(a[i]<a[i+1])
              maxA = a[i+1];
        };
        for(int i=0; i<sizeB-1; i++){
          if(b[i]>b[i+1]){
              minB = b[i+1];
          };
              
            
        };
        
        if(maxA > minB){
            
        }else if(sizeA == 1){
            
            if(sizeB == 1){
              while(bigTemp <= minB){
                if(minB % bigTemp == 0){
                  count++;
                    
                };
                    idx++;
                    bigTemp = gcm*idx;
              };
            }else{
                
                while(bigTemp<minB){
                    for(int i=0; i<sizeB; i++){
                        if(b[i] % bigTemp != 0){
                          break;  
                        };
                        if(i == sizeB-1){
                          count++;
                        };
                   };
                    idx++;
                    bigTemp = gcm*idx;
                    
                };
                
                
            };
 
            
        }else{
          //여기 문제인듯      
          for(int i=0; i<sizeA-1; i++)
          {              
              v1 = gcm;
              v2 = a[i+1];
            //v2 to big
            if(v1 > v2){
                vtemp = v1;
                v1 = v2;
                v2 = vtemp;
            };
              
              while(nam > 0){
                  nam = v2%v1;
                  gcm = v1;                  
              };
              lcm = lcm*a[i+1]/gcm;
          };
          
            
            bigTemp = lcm;
             while(bigTemp<=minB){
                 
                    for(int i=0; i<sizeB; i++){
                        if(b[i] % bigTemp != 0){
                          break;  
                        };
                        if(i == sizeB-1){
                          count++;
                        };
                   };
                    idx++;
                    bigTemp = lcm*idx;
                    
                };
        
        }
        
        return count;
    }
cs




 static int getTotalX(int[] a, int[] b) {

        /*

         * Write your code here.

         */

        

         int maxA = a[0]; //최대값

        int minB = b[0]; //최소값

        int maxB = b[0];

        int gcm = a[0]; //최대공약수

        int lcm = a[0]; //최소공배수

        int sizeA = a.length;

        int sizeB = b.length;

        int bigTemp = a[0];

        int count = 0;

        int idx = 1;

        

        

        int v1 = 0;

        int v2 = 0;

        int vtemp = 0;

        int nam = 1;

        

        for(int i=0; i<sizeA-1; i++){

          if(a[i]<a[i+1])

              maxA = a[i+1];

        };

        for(int i=0; i<sizeB-1; i++){

          if(b[i]>b[i+1]){

              minB = b[i+1];

          };

              

            

        };

        

        if(maxA > minB){

            

        }else if(sizeA == 1){

            

            if(sizeB == 1){

              while(bigTemp <= minB){

                if(minB % bigTemp == 0){

                  count++;

                    

                };

                    idx++;

                    bigTemp = gcm*idx;

              };

            }else{

                

                while(bigTemp<minB){

                    for(int i=0; i<sizeB; i++){

                        if(b[i] % bigTemp != 0){

                          break;  

                        };

                        if(i == sizeB-1){

                          count++;

                        };

                   };

                    idx++;

                    bigTemp = gcm*idx;

                    

                };

                

                

            };


            

        }else{

                

          for(int i=0; i<sizeA-1; i++)

          {              

              v1 = gcm;

              v2 = a[i+1];

            //v2 to big

            if(v1 > v2){

                vtemp = v1;

                v1 = v2;

                v2 = vtemp;

            };

              

              while(nam > 0){

                  nam = v2%v1;

                  gcm = v1;                  

              };

              lcm = lcm*a[i+1]/gcm;

          };

          

            

            bigTemp = lcm;

             while(bigTemp<=minB){

                 

                    for(int i=0; i<sizeB; i++){

                        if(b[i] % bigTemp != 0){

                          break;  

                        };

                        if(i == sizeB-1){

                          count++;

                        };

                   };

                    idx++;

                    bigTemp = lcm*idx;

                    

                };

        

        }

        

        return count;

    }