문제
프로그래머스
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의 최댓값까지 반복문을 돌려 답을 구하였다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 많이 받은 선물 (JS) (0) | 2024.11.23 |
---|---|
[프로그래머스] 테이블 해시 함수 (JS) (0) | 2024.11.20 |
[프로그래머스] 과제 진행하기 (JS) (2) | 2024.11.16 |
[프로그래머스] 뉴스 클러스터링 (JS) (0) | 2024.11.03 |
[프로그래머스] 붕대 감기 (JS) (2) | 2024.11.02 |