FrontEnd/프로그래머스

[JS] 숫자 카드 나누기

728x90

한쪽 카드뭉치는 모두 나눌 수 있어야 하고, 반대쪽 카드뭉치는 모두 나눌 수 없어야 한다.

 

따라서 우선 한쪽카드뭉치를 모두 나눌 수 있는 수는 해당 카드뭉치의 가장 작은 값의 약수들이란 생각이 들었다.

 

만약 해당 값의 가장 작은 약수들로 남은 수들을 나눌 수 있고, 반대편 카드뭉치의 수들을 나눌 수 없다면 답이된다.

 

 

따라서 철수와 영희의 입장에서 정답이 될 수 있는 후보들인 가장 작은값의 약수를 구한 이후 every 함수를 활용해서 나눌 수 있는지 없는지를 확인하였다.

 

 

조금 주의할 점은 일반적인 약수 알고리즘과 다르게 자기 자신을 넣어줘야 한다는 것이다.

 

 

const getDivisor = (n) => {
    const ret = []
    for (let i = 1 ; i<= n**0.5 ; i++) {
        if (!(n%i)) {
            ret.push(i)
            if (!(i===n**0.5)) ret.push(n/i)
        }
    }
    return ret
}

function solution(arrayA, arrayB) {
    arrayA.sort((a,b) => a-b)
    arrayB.sort((a,b) => a-b)
    
    const cul = getDivisor(arrayA[0]).sort((a,b) =>a-b)
    const young = getDivisor(arrayB[0]).sort((a,b) => a-b)
    
    let culNum = 0
    for (const el of cul) {
        culNum = arrayA.every(n => !(n%el)) && arrayB.every(n => n%el) ? el : culNum
    }
    let youngNum = 0
    for (const el of young) {
        youngNum = arrayB.every(num => !(num%el)) && arrayA.every(n=>n%el) ? el : youngNum
    }
    
    return Math.max(culNum,youngNum)
    
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 롤케이크 자르기  (0) 2023.06.05
[JS] 우박수열 정적분  (1) 2023.06.03
[JS] 귤 고르기  (0) 2023.06.02
[JS] 점 찍기  (0) 2023.06.02
[JS] 디펜스 게임  (0) 2023.06.01