백준 11098번: 첼시를 도와줘! (C++)
문제
구단이 성적을 내지 못한다면 답은 새 선수 영입뿐이다. 이것은 오늘날 유럽 리그에서 가장 흔한 전략이고, 노르웨이의 로젠버그 팀은 이러한 전략이 성공한 대표적 예시다. 그들은 많은 스카우터들을 지구 곳곳에 파견해 가능성 있는 루키를 찾는다.
현재 첼시는 프리미어 리그에서 헤매고 있고, 결국 새로운 선수를 사기로 결정했다. 하지만 그들은 스카우터를 기다리기 지쳤고, 훨씬 더 효율적인 전략을 개발해냈다. “만약 무언가 팔리고 있다면, 그것에는 합당한 이유가 있다”는 배룸의 명언이 바로 그것이다. 축구에서 이 말은 곧 가장 비싼 선수가 가장 좋은 선수라는 이야기가 된다.
이에 따라 새로운 선수를 찾는 방법은 단순히 구단들에게 전화를 걸어 그들의 가장 비싼 선수를 사는게 되었다. 당신의 임무는 첼시가 리스트에서 가장 비싼 선수를 찾아낼 수 있도록 돕는 것이다.
- 입력
- 첫 번째 줄에는 테스트 케이스의 개수 n이 주어진다 (n≤100).
- 각 테스트 케이스의 첫 번째 줄 p는 고려해야될 선수의 수이다 (1≤p≤100).
- 그 아래 p개의 줄에는 선수의 정보가 표시된다.
- 각각의 줄은 선수의 가격 C 와 이름을 입력한다 (C<2*109).
- 모든 선수의 가격은 서로 다르다.
- 선수의 이름은 20자 이하여야 하며, 사이에 공백이 있어서는 안 된다.
- 출력
- 각각의 테스트 케이스에서 가장 비싼 선수의 이름을 출력해야한다.
코드
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
33
34
35
36
37
38
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
int main(void){
int case_num;
cin >> case_num;
vector<pair<int, string> > v;
vector<string> n;
for (int i = 0; i < case_num; i++){
int player_num = 0;
cin >> player_num;
v.clear();
for (int j = 0; j < player_num; j++){
int c;
string name;
cin >> c >> name;
v.push_back(make_pair(c, name));
}
sort(v.begin(), v.end(), greater<pair<int, string> >());
n.push_back(v[0].second);
}
for (int i = 0; i < n.size(); i++){
cout << n[i] << endl;
}
}
접근 및 풀이
우선 테스트 케이스의 수를 받아 주고, 테스트 케이스의 수만큼 반복문을 돌린다. 반복문 안에서는 선수의 수를 받고, 선수의 가격과 이름을 받아 Vector에 pair를 사용하여 쌍으로 값을 저장해 주었다.
이번 문제를 풀면서 처음으로 Vector를 사용해 보았다. 원래는 C에서 하듯이 각각 배열로 받은 뒤 값을 비교해 주는 과정을 거칠 생각을 하고 있었으나 다른 사람들의 풀이를 보니 Vector를 사용하는 경우가 많아 Vector에 대해 공부해 보았다. 확실히 Vector를 사용하는 편이 데이터를 정렬하고 이용하는 면에서 깔끔하고 편했다.
받은 선수의 수만큼 반복문을 돌려주며 Vector에 값을 저장해 준 뒤에는 Vector의 값을 sort()
를 이용해 비교하였다. 원래 sort()
는 오름차순 정렬을 기본으로 하나 가장 큰 값을 찾기 위해서는 내림차순 정렬한 뒤 가장 첫 번째를 뽑아오는 것이 더 편할 것 같아 greater<>()
를 이용해 주었다.
greater<>()
의 경우 <> 내부에 아무것도 넣어주지 않고 코드를 디버깅했을 때too few template arguments for class template 'greater'
라는 오류가 발생했다. 원래는 오류가 발생하지 않았을지 모르지만, cpp가 버전이 업그레이드 되면서 몇몇 디버거에서 오류가 발생하는 듯 했다. 이 경우greater<>()
내부에 정렬하려는 vector의 형태를 명시해 주었을 때 오류가 발생하지 않았다.
내림차순 정렬된 각각의 Vector 중 가장 첫번째 값을 뽑아와 선수들의 목록을 담는 Vector n에 넣어준 뒤 Vector n의 요소들을 출력해 준다.
댓글남기기