문제

등차 수열을 이루는 4개의 숫자 카드를 받았는데, 한 카드를 잃어버렸다. 잊어버린 카드를 찾아주자.

입력은 자연수로 된 3개의 숫자 카드를 받고, 한 가지의 잃어버린 카드의 수를 반환한다.

단, 잃어버린 카드는 가운데 숫자 카드로 한정한다.


예시

예를 들어 1, 7, 10을 입력 받았을 때 초항이 1이고, 두 수의 차가 3인, 등차 수열 1, 4, 7, 10을 찾아 4를 반환하도록 한다.

Copy
# 입력값
1 7 10
3 8 18
11 2 5
Copy
# 출력값
4
13
8

코드

👉 방법1

Copy
function answer(a, b, c) {
  let number = 0;

  // sort
  let num = [a, b, c];
  let sorted = num.sort((x, y) => x - y);

  let x = sorted[1] - sorted[0];
  let y = sorted[2] - sorted[1];
  let d = Math.min(x, y);
  x > y ? (number = sorted[0] + d) : (number = sorted[1] + d);

  return number;
}

👉 방법2

Copy
function answer(a, b, c) {
  // sort
  let num = [a, b, c];
  let sorted = num.sort((x, y) => x - y);

  // 1. 등차값 d 찾기
  let d = 0;
  for (let i = 1; i < num.length; i++) {
    d += num[i] - num[i - 1];
  }
  d /= num.length;

  // 2. 빈 index 찾기
  let index = num[2] - num[1] > num[1] - num[0] ? 2 : 1;

  // 3. 이전값+d
  let number = num[0] + d * index;

  return number;
}
Copy