[프로그래머스] Lv2. 숫자 카드 나누기- JavaScript

이상돈·2023년 7월 1일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 숫자 카드 나누기

문제

제한사항

📌 내가 생각한 풀이

각각의 배열의 최대공약수의 약수를 구한다음 큰 숫자 순서로 나누고, 나누어지는게 없으면 result에 push하자. 그 이후 result에서의 최대값을 답으로 return하자.
const getGCD = (num1, num2) =>{
    const remainder = num1 % num2;
    if(remainder === 0) return num2;
    return getGCD(num2, remainder);
}
const get= (num) =>{
    let arr = [];
    for(var i =2; i<=Math.sqrt(num); i++){
        if(num% i === 0){
            arr.push(i);
            arr.push(num/i);
        }
    }
    arr = [...arr, num];
    return arr;
}
function solution(arrayA, arrayB) {
    var answer = 0;
    let gcd = 0;
    let gcd2 = 0;
    let result  = [];
    let a = arrayA.slice();
    let b = arrayB.slice();
    let times = arrayA.length-1;
    
    while(times > 0){
        let popped1 = arrayA.pop();
        let popped2 = arrayA.pop();
        let popped3 = arrayB.pop();
        let popped4 = arrayB.pop();
        gcd = getGCD(popped1, popped2);
        gcd2 = getGCD(popped3,popped4)
        arrayA.push(gcd);
        arrayB.push(gcd2);
        times--;
    }
    if(a.length === 1) gcd = a[0]
    if(b.length === 1) gcd2 = b[0]
        let cdArr = get(gcd);
        let cdArr2 = get(gcd2);
        // console.log(cdArr, cdArr2)
        for(var k = cdArr.length-1; k>=0; k--){
            const check = (element) => element % cdArr[k] === 0;
            if(!b.some(check)) {result.push(cdArr[k]);break;};
        }
        for(var j = cdArr2.length-1; j>=0; j--){
            let check = (e)=>e%cdArr2[j] === 0;
            if(!a.some(check)){
                // console.log(cdArr2[j])
                result.push(cdArr2[j])
                break;
            }
        }

    return result.length === 0 ? 0 : Math.max(...result)
}

📌 느낀점

되게 간단하게 풀 수 있었는데 복잡하게 푼 문제이다. 사람들이 작성한 코드를 보고 코드를 다시한번 리뷰해야겠다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글