작성일 :

문제 링크

32364번 - Hat Circle

설명

원형으로 앉은 사람들 중 맞은편과 모자 번호가 같은 사람의 수를 구하는 문제입니다.


접근법

원형으로 앉았으므로 맞은편은 절반만큼 떨어진 위치에 있는 사람입니다.

따라서 앞쪽 절반만 순회하며 맞은편과 비교하고, 같으면 서로가 맞은편이므로 두 명을 함께 카운트합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

class Program {
  static void Main() {
    var data = Console.In.ReadToEnd();
    var parts = data.Split();
    var idx = 0;
    var n = int.Parse(parts[idx++]);
    var h = new int[n];
    for (var i = 0; i < n; i++)
      h[i] = int.Parse(parts[idx++]);

    var half = n / 2;
    var cnt = 0;
    for (var i = 0; i < half; i++) {
      if (h[i] == h[i + half]) cnt += 2;
    }

    Console.WriteLine(cnt);
  }
}

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
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;

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

  int n; cin >> n;
  vi h(n);
  for (int i = 0; i < n; i++)
    cin >> h[i];

  int half = n / 2;
  int cnt = 0;
  for (int i = 0; i < half; i++) {
    if (h[i] == h[i + half]) cnt += 2;
  }

  cout << cnt << "\n";

  return 0;
}