작성일 :

문제 링크

2997 - 네 번째 수

설명

등차수열을 이루는 정수 4개1개가 누락된 상태에서,

나머지 3개의 수가 주어졌을 때 빠진 1개의 수를 찾아내는 문제입니다.


주어진 수는 정렬되지 않은 상태일 수 있지만, 문제에서 주어진 조건에 따라 항상 등차수열을 구성할 수 있습니다.


접근법

  • 우선, 주어진 세 수를 오름차순으로 정렬합니다.
  • 정렬된 세 수를 기준으로, 앞과 뒤의 차이를 각각 계산합니다:
    • 앞쪽 차이 = 두 번째 수첫 번째 수
    • 뒤쪽 차이 = 세 번째 수두 번째 수
  • 세 수 사이의 차이가 동일한 경우 등차수열의 마지막 수가 누락된 것입니다.
  • 만약 두 차이가 다른 경우:
    • 뒤쪽 차이가 작다면 가운데 수가 누락된 경우입니다. 따라서, 첫 번째 수에 뒤쪽 차이를 공차로 더한 값이 정답입니다.
    • 반대로 앞쪽 차이가 작다면 마지막 수가 빠진 경우입니다. 따라서, 두 번째 수에 앞쪽 차이를 공차로 더한 값이 정답입니다.
  • 문제 조건상 정답은 반드시 존재하며, 복수의 정답이 가능할 경우 어느 하나를 출력해도 정답으로 처리됩니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Linq;

class Program {
  static void Main() {
    var input = Console.ReadLine().Split().Select(int.Parse).ToArray();
    Array.Sort(input);

    var d1 = input[1] - input[0];
    var d2 = input[2] - input[1];

    if (d1 == d2) Console.WriteLine(input[2] + d1);
    else if (2 * d2 == d1) Console.WriteLine(input[0] + d2);
    else Console.WriteLine(input[1] + d1);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int a[3];
  cin >> a[0] >> a[1] >> a[2];

  sort(a, a + 3);

  int d1 = a[1] - a[0], d2 = a[2] - a[1];

  if (d1 == d2) cout << a[2] + d1;
  else if (2 * d2 == d1) cout << a[0] + d2;
  else cout << a[1] + d1;

  cout << "\n";

  return 0;
}