코딩테스트

[프로그래머스] 숫자 카드 나누기 (JS)

여유로운 프론트엔드 개발자 2024. 11. 20. 16:10

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

  (1) 비교할 마지막 숫자를 구하기 위해 두 배열의 최대 정수를 구한다. (Math.max 시간초과 -> sort로 변경)

  (2) every 함수를 이용하여 조건에 맞는 답을 구한다.

function solution(arrayA, arrayB) {
    const unionArr = [...arrayA, ...arrayB].sort((a, b) => a - b);
    const limitNum = unionArr[unionArr.length - 1];
    let answer = 0;
    
    for (let i = 2; i <= limitNum; i++) {
        if ((arrayA.every(num => num % i === 0) && arrayB.every(num => num % i !== 0)) || 
           (arrayB.every(num => num % i === 0) && arrayA.every(num => num % i !== 0))) {
            answer = i;
        } 
    }
    
    return answer;
}

 

결론

속도 개선을 위해 limitNum / 2로 범위를 줄여 반복문을 실행했으나 테스트 케이스 30, 31에서 오류가 났다. 예를 들어 arrayA = [10], arrayB = [8]인 경우, 답은 10이 나와야 하는데 범위가 5로 줄어들어 잘못된 답이 나오기 때문이다. 결국 arrayA와 arrayB의 최댓값까지 반복문을 돌려 답을 구하였다.