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;
}
이렇게 가져오면 어떻게 보라고
모바일배려 안하냐?
모바일에서 안봐짐?