작성일 :

문제 링크

15429번 - Odd Gnome (Easy)

설명

주어진 여러 그룹의 노움들 중에서, 각 그룹 별로 순서대로 정렬되지 않은 ‘왕’ 노움을 찾아내는 문제입니다.

각 그룹의 노움들은 증가하는 ID 순서대로 배열되어 있으며, 왕 노움만이 이 순서에서 제외됩니다.

또한, 왕 노움은 절대로 그룹의 첫 번째나 마지막에 오지 않습니다.


각 그룹에 대해서, 첫 번째 노움과 마지막 노움을 제외한 모든 노움을 순회하면서, 왕 노움을 찾아냅니다.

이 때, 왕 노움은 그 앞의 노움 ID1 을 더한 값과 자신의 ID 가 다르며,

동시에, 자신의 ID1 을 더한 값과 그 뒤의 노움 ID 가 다르다는 조건을 활용합니다.


즉, (gnomes[j - 1] + 1 != gnomes[j]) && (gnomes[j] + 1 != gnomes[j + 1]) 조건을 만족하는 노움이 왕 노움이 됩니다.


최종적으로, 각 그룹의 왕 노움의 위치를 찾아 출력합니다.




Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace Solution {
  class Program {
    static void Main(string[] args) {

      var n = int.Parse(Console.ReadLine()!);

      for (int i = 0; i < n; i++) {
        var inputs = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
        var g = inputs[0];
        var gnomes = inputs.Skip(1).ToArray();

        var kingPosition = Enumerable.Range(1, g - 2)
          .FirstOrDefault(j =>
            gnomes[j - 1] + 1 != gnomes[j] && gnomes[j] + 1 != gnomes[j + 1]) + 1;

        Console.WriteLine(kingPosition);
      }

    }
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>

using namespace std;

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

  int n; cin >> n;

  for (int i = 0; i < n; i++) {
    int g; cin >> g;
    vector<int> gnomes(g);

    for (int j = 0; j < g; j++)
      cin >> gnomes[j];

    for (int j = 1; j < g - 1; j++) {
      if (gnomes[j - 1] + 1 != gnomes[j] && gnomes[j] + 1 != gnomes[j + 1]) {
        cout << j + 1 << "\n";
        break ;
      }
    }
  }

  return 0;
}