호지

[프로그래머스] 숫자카드 나누기 문제풀이 JS 본문

알고리즘/프로그래머스

[프로그래머스] 숫자카드 나누기 문제풀이 JS

_hoji

최대공약수를 이용한 문제풀이이다.

각각 arrayA와 arrayB에서 최대공약수를 구한뒤,

arrayA의 최대공약수가 arrayB의 모든 원소에서 나누어 떨어지지 않는지,

arrayB의 최대공약수가 arrayA의 모든 원소에서 나누어 떨어지지 않는지

두 경우를 확인한 뒤, 한번이라도 나누어 떨어졌다면 해당 값은 조건을 만족하지 않는 경우이므로 제외한다.

둘의 최대공약수가 조건을 모두 만족한다면 두 값 중 큰 값을,

아니라면 만족하는 값을

둘다 만족하지 않으면 0을 결과값으로 반환하면 된다.

const gcd = (v1, v2) => {
  let a = v1 > v2 ? v1 : v2
  let b = v1 <= v2 ? v1 : v2
  while (b > 0) {
    ;[a, b] = [b, a % b]
  }
  return a
}

function solution(arrayA, arrayB) {
  if (arrayA.length === 1) {
    if (arrayA[0] === arrayB[0]) return 0
    return arrayA[0] > arrayB[0] ? arrayA[0] : arrayB[0]
  }
  let gcdA = gcd(arrayA[0], arrayA[1])
  let gcdB = gcd(arrayB[0], arrayB[1])
  for (let i = 2; i < arrayA.length - 1; i++) {
    gcdA = gcd(gcdA, arrayA[i])
    gcdB = gcd(gcdB, arrayB[i])
  }
  for (let i = 0; i < arrayA.length; i++) {
    if (gcdA) {
      if (arrayB[i] % gcdA === 0) {
        gcdA = false
      }
    }
    if (gcdB) {
      if (arrayA[i] % gcdB === 0) {
        gcdB = false
      }
    }
  }
  if (gcdA) {
    if (gcdA > gcdB) return gcdA
  }
  if (gcdB) return gcdB
  return 0
}

https://school.programmers.co.kr/learn/courses/30/lessons/135807

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments