728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/135807
문제 풀이 방법
이 문제는 구현 문제이며 최대 공약수를 이용해 풀이를 하야하는 문제이다.
arrayA에서 모든 요소의 최대 공약수가, arrayB에서 모든 요소의 약수가 되면 않되는 수와
반대로 arrayB에서 모든 요소의 최대 공약수이며 arrayA에서 모든 요소의 약수가 되지 않는 수를 비교해 둘 중 가장 큰 수를 반환해주면 된다.
그렇다면 나는 어떻게 문제를 풀었나?
총 2번의 반복문을 이용해 arrayA와 arrayB 요소들을 순회해줬으며,
그 안에 가장 작은 요소의 약수가 조건에 부합한지 체크하고 부합하다면 answer에 넣어주고 for문을 탈출했다.
아래의 코드는 내가 푼 코드이다.
참고한 코드
const solution = (arrayA, arrayB) => {
let answer = [0, 0];
arrayA.sort((a, b) => a-b);
arrayB.sort((a, b) => a-b);
for(let i=1; i<arrayA[0]; i++){
const num = arrayA[0] / i;
if(Number.isInteger(num)){
const res = arrayA.filter(e => e % num !== 0);
const res2 = arrayB.filter(e => e % num === 0);
if(res.length || res2.length) continue;
answer[0] = num;
break;
}
}
// sqrt를 이용해 약수의 범위를 좁힌것은 잘못된 방법이였다.
for(let i=1; i<arrayB[0]; i++){
const num = arrayB[0] / i;
if(Number.isInteger(num)){
const res = arrayB.filter(e => e % num !== 0);
const res2 = arrayA.filter(e => e % num === 0);
if(res.length || res2.length) continue;
answer[1] = num;
break;
}
}
return Math.max(...answer);
}
이렇게 풀었지만 뭔가 코드도 길고 시간도 꽤 길게 나왔다.
그래서 다른 사람들이 작성한 코드도 확인했다.
다른 사람의 코드
const solution = (arrayA, arrayB) => {
arrayA.sort((a, b) => a-b);
arrayB.sort((a, b) => a-b);
const func = (arr1, arr2) => {
for(let i = arr1[0]; i > 0; i--){
if(arr1.every(e => e % i === 0) && !arr2.some(e => e % i === 0)) return i;
}
return 0;
}
return Math.max(func(arrayA, arrayB), func(arrayB, arrayA));
}
이 코드에서는 every와 some 메서드가 사용되었다.
내가 다양한 메서드를 사용해 푸는 것이 아직은 서투른것 같다.
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 연습문제 / 무인도 여행 (0) | 2023.11.14 |
---|---|
2Level / 연습 문제 / 시소 짝꿍 (1) | 2023.11.13 |
[JS] 2Level / Summer/Winter Coding(~2018) / 배달 (0) | 2023.11.06 |
[JS] 2Level / 연습문제 / 줄 서는 방법 (0) | 2023.11.04 |
[JS] 2Level / 연습문제 / 마법의 엘리베이터 (0) | 2023.11.02 |