HackerRank

[HackerRank] Between Two Sets (javascript)

수다쟁이직딩이 2022. 3. 4. 15:03

이 문제를 해결한 방법

1. input값의 의미를 파악한다.

2. a배열에서 끝자리 수와 b배열에서의 앞자리 수까지 전체 수를 for문으로 돌려준다.

 ex) a = [2, 4]

      b = [16, 32, 96]

      4~16까지 수를 추려낸다.

3. for문에서 나온 값 중 a배열의 값에서 %계산을 구하여 a배열의 나머지가 0인 값만을 추려내여 cntArr배열에 추가. 단 a배열의 값이 for문에서 나온 값보다 작을 경우 그 반대의 계산을 한다.

 ex) for문에서 나온 값 : 4~16

     if(a[i]<4) 4%a[i]

    if(a[i]>4) a[i]%4

4. b배열의 전체 값을 cntArr 배열의 각 값의 %계산했을 때 0일 경우 최종적인 값으로 간주한다.

 

function getTotalX(a, b) {
    // Write your code here
    let cntArr = [];
    let resultArr = [];
    
    //a배열 확인
    for(let i=a[a.length-1];i<=b[0]; i++){
        let chk = true;
        for(let j=0; j<a.length; j++){
            if(a[j]>i && a[j]%i != 0){
                chk = false;
                break;
            }
            else{
                if(i%a[j] != 0){
                    chk = false;
                    break;
                }
            }
        }
        console.log(i + ' : ' + chk);
        if(chk){
           cntArr.push(i);
        }
    }
    
    // b배열 확인
    for(let i=0; i<cntArr.length; i++){
        let chk = true;
        for(let j=0;j<b.length; j++){
            if(b[j]%cntArr[i] != 0){
                chk = false;
                break;
            }
        }
        if(chk){
            resultArr.push(cntArr[i]);
        }
    }
    
    return resultArr.length;
}