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 |