[JS] 프로그래머스 - 숫자 카드 나누

DARTZ·2023년 7월 8일
0

알고리즘

목록 보기
131/135

문제

정답 코드

function solution(arrayA, arrayB) {
    
    arrayA.sort((x, y) => x - y);
    arrayB.sort((x, y) => x - y);
    
    function calculater(arrA, arrB) {
        for (let i = arrA[0]; i > 0; i--) {
            if (arrA.every((v) => v % i === 0) && !arrB.some((v) => v % i === 0)) return i;
        }
        return 0;
    }
    
    return Math.max(calculater(arrayA, arrayB), calculater(arrayB, arrayA));
}

1시간 정도 고민하다가 도저히 시간과 효율성 부분에서 해결이 나지 않아 다른 분의 코드를 참고했습니다.

풀이 아이디어

  • 각 배열을 오름차순으로 정렬해준다. (각 배열의 첫 원소를 나눌 수 있어야하므로)
  • arrayA의 첫 원소를 첫 원소를 기준으로 -1해주면서 조건에 맞는지 확인해준다.
  • 맞는 수가 있다면 그 수가 제일 큰 수이므로 return 해준다.
  • 없다면 0을 return 해준다.

arrayA와 arrayB 순서로 검사를 해준 다음 가장 큰 수를 return 해주면 됩니다.

새로 공부한 내용

여기서 some과 every가 사용 되었는데
some은 배열의 원소 중에 하나라도 통과가 되면 true를 반환합니다.
every는 배열 모든 배열 원소가 통과해야 true를 반환합니다.

every와 some을 사용했으면 적은 코드량으로 해결할 수 있는 문제였습니다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글