Coding Problem
[프로그래머스] 숫자 카드 나누기
Yepchani
2024. 11. 19. 21:53
반응형
문제
숫자 카드 나누기
https://school.programmers.co.kr/learn/courses/30/lessons/135807
예시 코드
function solution(arrayA, arrayB) {
let gcdA = arrayA[0];
for (let i = 1; i < arrayA.length; i++) {
gcdA = gcd(gcdA, arrayA[i]);
}
let gcdB = arrayB[0];
for (let i = 1; i < arrayB.length; i++) {
gcdB = gcd(gcdB, arrayB[i]);
}
let canA = true;
let canB = true;
for (let i = 0; i < arrayB.length; i++) {
if (arrayB[i] % gcdA === 0) {
canA = false;
break;
}
}
for (let i = 0; i < arrayA.length; i++) {
if (arrayA[i] % gcdB === 0) {
canB = false;
break;
}
}
if (canA && canB) return Math.max(gcdA, gcdB);
else if (canA) return gcdA;
else if (canB) return gcdB;
else return 0;
}
function gcd(a, b) {
while (b) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
풀이
다음 조건을 만족하는 가장 큰 양의 정수 a를 찾는 문제입니다.
- 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
- 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
각 배열의 최대공약수를 구한 후 조건을 만족하는 가장 큰 수를 반환합니다.
만약 없다면 0을 반환합니다.