안녕하세요
프로그래머스 JS 숫자 카드 나누기 (나누어 떨어지는 수) 본문
숫자 카드 나누기 (45) 문제 보기
A의 모든 숫자를 나눌 수 있고, B의 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
B의 모든 숫자를 나눌 수 있고, A의 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
를 만족하는 수 중 가장 큰 a를 찾고, 없다면 0을 반환하시오
문제 풀이
// 나누어 떨어지는 수들을 찾기
const getDivisors = (number) => {
const divisors = [];
for (let i = 2; i <= number; i++) {
if (number % i === 0) divisors.push(i);
}
return divisors.reverse();
};
// 조건에 따라 가장 크게 나누어 떨어지는 수 찾기
const findMaxDivisor = (cardsA, cardsB, divisors) => {
const results = [];
for (let divisor of divisors) {
if (cardsA.every((card) => card % divisor === 0) &&
cardsB.every((card) => card % divisor !== 0)
) {
results.push(divisor);
}
}
return results;
};
const solution = (arrayA, arrayB) => {
const sortedA = arrayA.sort((a, b) => a - b);
const sortedB = arrayB.sort((a, b) => a - b);
// 각 배열에서 가장 큰 수에 대해 나누어 떨어지는 수의 집합 만들기
const maxADivisors = getDivisors(sortedA[sortedA.length - 1]);
const maxBDivisors = getDivisors(sortedB[sortedA.length - 1]);
// 각 배열에서 조건에 맞는 수 찾기
const maxADivisor = findMaxDivisor(sortedA, sortedB, maxADivisors);
const maxBDivisor = findMaxDivisor(sortedB, sortedA, maxBDivisors);
// 조건에 맞는 수 배열 합치기
const results = maxADivisor.concat(maxBDivisor);
// 가장 큰 조건에 맞는 수 또는 0 반환하기
const result = results.length ? Math.max(...results) : 0;
return result;
};
solution([2, 2, 2], [3, 3, 3]);
1. 각 배열의 가장 큰 수에 대해서 나누어 떨어지는 수의 집합을 구한다.
2. 이 집합의 수들을 이용해 문제의 조건에 맞는 수를 찾는다.
3. 가장 큰 수를 반환, 조건에 맞는 수가 없다면 0을 반환한다.
조건이 무엇을 말하는지 이해만 했다면 복잡하지 않게 해결할 수 있는 문제였습니다.
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS 미로 탈출 (BFS 최단거리 찾기) (0) | 2023.12.17 |
---|---|
프로그래머스 JS 테이블 해시 (bitwise XOR 연산) (0) | 2023.12.15 |
프로그래머스 JS 시소 짝꿍 (해시 맵) (0) | 2023.12.12 |
프로그래머스 JS 마법의 엘리베이터 (덧셈 올림) (0) | 2023.12.11 |
프로그래머스 JS 호텔 대실 (겹치는 시간대) (0) | 2023.12.10 |