작성일 :

문제 링크

28114번 - 팀명 정하기

설명

세 팀원의 입학 연도, 해결 문제 수, 성씨가 주어질 때, 두 가지 방식으로 팀명을 만드는 문제입니다.

첫 번째는 연도의 뒤 두 자리를 오름차순으로 이어붙인 문자열입니다.

두 번째는 해결 문제 수가 많은 순으로 성씨의 첫 글자를 이어붙인 문자열입니다.


접근법

먼저 세 팀원의 정보를 저장합니다.

이후 연도 기준 오름차순으로 정렬하여 첫 번째 팀명을 출력합니다.

다음으로 해결 문제 수 기준 내림차순으로 정렬하여 두 번째 팀명을 출력합니다.


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
27
28
29
30
using System;
using System.Collections.Generic;

class Program {
  struct Member {
    public int solved;
    public int year;
    public string surname;
  }

  static void Main() {
    var team = new List<Member>(3);
    for (var i = 0; i < 3; i++) {
      var p = Console.ReadLine()!.Split();
      team.Add(new Member {
        solved = int.Parse(p[0]),
        year = int.Parse(p[1]) % 100,
        surname = p[2]
      });
    }

    team.Sort((a, b) => a.year.CompareTo(b.year));
    foreach (var m in team) Console.Write(m.year.ToString("D2"));
    Console.WriteLine();

    team.Sort((a, b) => b.solved.CompareTo(a.solved));
    foreach (var m in team) Console.Write(m.surname[0]);
    Console.WriteLine();
  }
}

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

struct Member {
  int solved, year;
  string surname;
};

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

  vector<Member> team(3);
  for (int i = 0; i < 3; i++) {
    cin >> team[i].solved >> team[i].year >> team[i].surname;
    team[i].year %= 100;
  }

  sort(team.begin(), team.end(), [](const Member& a, const Member& b) {
    return a.year < b.year;
  });
  for (auto &m : team) cout << setw(2) << setfill('0') << m.year;
  cout << "\n";

  sort(team.begin(), team.end(), [](const Member& a, const Member& b) {
    return a.solved > b.solved;
  });
  for (auto &m : team) cout << m.surname[0];
  cout << "\n";

  return 0;
}