[Codility][CountingElements] 원소 Swap해서 각 배열합이 같은지 체크

minnsane·2020년 9월 16일
0

Algorithms

목록 보기
3/8

CountingElements

문제

두 배열 A, B에서 원소 하나씩을 swap했을 때 각 배열의 원소 합이 같은 경우가 있으면 true, 없으면 false

분석

이 또한 Codility의 O(n+m) 솔루션을 분석하여따....

  • 모든 원소가 정수일 때, Sum(A)와 Sum(b)의 차가 홀수이면, 절!대! swap해서 원소합이 같아질 수 없음
  • A에서 (차이/2) + α 의 값의 원소와 B에서 α 값의 원소가 서로 맞교환 하면 위의 조건이 성립한다.
  • A : [4, 8] / B: [2, 6] 일 때, sum(A)와 sum(B)의 차이는 4이다. 따라서 차이/2 = 2, 4<=>2 하면 성립

코드

const solution = (A, B) => {

  let sumA = A.reduce((a, b) => a+b);
  let sumB = B.reduce((a, b) => a+b);
  let setA = new Set(A);
  
  let d = sumA-sumB;
  if(d%2) return false;
  d /= 2;

  for(let num of B){
    if(num-d > 0 && setA.has(num-d)) return true;
  }

  return false;

}

중요한건 차를 구할 때 abs를 쓰지 않는것이당!
d의 값은 음수여도 가능 (A의 합이 B의 합보다 작을 경우를 위해)

profile
Knope's not-so-secret binder

0개의 댓글