해결방법
인기도를 map을 이용하여 이름과 인기도를 같이 저장한다. map은 key값과 value값으로 이루어진 일종의 트리이다.
그 다음에는 학생의 이름과 좋아하는 학생을 입력받는데, 그 학생의 인기도를 1 올려주게 된다.
마지막으로 sort를 이용하여 정렬해주는데, map을 vector<pair>로 변환해주는 과정을 거쳐야 한다.
map은 값을 기준으로 정렬을 할 수 없기 때문이다.
정답 코드
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> students(n);
map<string, int> popularity;
for (int i = 0; i < n; i++)
{
cin >> students[i];
popularity[students[i]] = 0;
}
cin.ignore();
for (int i = 0; i < n; i++)
{
string line;
getline(cin, line);
string favorite;
for (size_t j = 0; j <= line.size(); j++)
{
if (j == line.size() || line[j] == ' ')
{
if (!favorite.empty())
{
popularity[favorite]++;
favorite.clear();
}
}
else
{
favorite += line[j];
}
}
}
vector<pair<string, int>> result(popularity.begin(), popularity.end());
sort(result.begin(), result.end(), [](const pair<string, int>& a, const pair<string, int>& b)
{
if (a.second == b.second) return a.first < b.first;
return a.second > b.second;
});
for (const auto& p : result)
{
cout << p.first << " " << p.second << endl;
}
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 너의 평점은 25206 (0) | 2024.12.15 |
---|---|
BOJ - 블랙잭 2798 (0) | 2024.12.15 |
BOJ - 2292 벌집 (0) | 2024.12.15 |
BOJ - 네 번째 점 3009 (0) | 2024.12.15 |
BOJ - 수 정렬하기 3 10989 (0) | 2024.12.15 |