작성일 :

문제 링크

5533번 - 유니크

설명

각 참가자는 3라운드에 숫자를 하나씩 제출합니다. 같은 라운드에서 자기 숫자가 유일하면 그 숫자만큼 점수를 얻고, 중복되면 0점을 받습니다. 세 라운드 점수를 합산해 참가자별 총점을 출력합니다.


접근법

먼저 모든 입력을 저장합니다. 각 라운드마다 어떤 숫자가 몇 번 등장했는지 빈도를 셉니다. 그런 다음 각 참가자의 숫자가 해당 라운드에서 한 번만 등장했으면 그 숫자를 점수에 더합니다.



Code

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
using System;

class Program {
  static void Main() {
    var n = int.Parse(Console.ReadLine()!);
    var a = new int[n, 3];
    for (var i = 0; i < n; i++) {
      var parts = Console.ReadLine()!.Split();
      for (var j = 0; j < 3; j++)
        a[i, j] = int.Parse(parts[j]);
    }

    var score = new int[n];
    for (var round = 0; round < 3; round++) {
      var freq = new int[101];
      for (var i = 0; i < n; i++)
        freq[a[i, round]]++;
      for (var i = 0; i < n; i++) {
        if (freq[a[i, round]] == 1) score[i] += a[i, round];
      }
    }

    for (var i = 0; i < n; i++)
      Console.WriteLine(score[i]);
  }
}

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

typedef vector<int> vi;
typedef vector<vi> vvi;

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

  int n; cin >> n;
  vvi a(n, vi(3));
  for (int i = 0; i < n; i++)
    cin >> a[i][0] >> a[i][1] >> a[i][2];

  vi score(n, 0);
  for (int round = 0; round < 3; round++) {
    int freq[101] = {0};
    for (int i = 0; i < n; i++)
      freq[a[i][round]]++;
    for (int i = 0; i < n; i++) {
      if (freq[a[i][round]] == 1) score[i] += a[i][round];
    }
  }

  for (int i = 0; i < n; i++)
    cout << score[i] << "\n";

  return 0;
}