코딩테스트 연습

프로그래머스 코딩테스트 연습 - 숫자 카드 나누기 JavaScript

citron031 2023. 1. 8. 00:56

function solution(arrayA, arrayB) {
    arrayA.sort((a, b) => b - a);
    arrayB.sort((a, b) => b - a);
    const getMax = (x, y) => {
        for(let i = x[0]; i > 1; i--) {
            if(x.every(el => el % i === 0) 
               && !y.some(el => el % i === 0)) {
                return i;
            }
        }
        return 0;
    }
    const x = getMax(arrayA, arrayB);
    const y = getMax(arrayB, arrayA);
    return x > y ? x : y;
}

이번 문제를 푸는 데, 다른 사람의 코드를 보고 여러 번 수정하였다.

처음에는 공약수를 구하여 문제에 접근하려고 했지만, 별로 좋은 접근 방법이 아닌 것 같아 달리 생각해보았다.

공약수를 구하는 것이 의미가 있을 것이라 생각했지만 비용이 너무 많이 들고 각 최대공약수를 다시 다른 배열의 숫자들로 나누는 과정도 필요했다.

따라서, 그냥 가장 큰수를 기준으로 숫자를 줄여가며 조건을 만족하는 가장 큰 수가 답이 되는 것으로 생각을 했다.

그리고 이 과정은 두 배열이 서로 역할을 바꿔가며 진행을 하고, 그 두 수중에서 가장 큰 수가 정답이 되는 것으로 문제를 해결했다.

하지만 여전히 공약수를 잘 사용한다면, 더 효율적인 코드를 구성할 수 있지 않을까 생각이 든다.