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를 찾는 문제입니다.

  1. 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
  2. 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a

 

각 배열의 최대공약수를 구한 후 조건을 만족하는 가장 큰 수를 반환합니다.

만약 없다면 0을 반환합니다.