얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다.
선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer;
// 등수별 이름
map<int, string> rank;
// 이름별 등수
map<string, int> people;
// 초기값 입력
for(int i = 0; i < players.size(); i++){
rank[i] = players[i];
people[players[i]] = i;
}
// 등수 변경 시작
for(int i = 0; i < callings.size(); i++){
int now_rank_num = people[callings[i]]; // 현재 등수
string changed_name = rank[now_rank_num - 1]; // 바로 위 등수 선수 이름
// 등수 변경
rank[now_rank_num - 1] = callings[i]; // 등수, 이름
people[callings[i]] -= 1; // 이름, 등수
rank[now_rank_num] = changed_name;
people[changed_name] += 1;
}
// 정답
for(auto it = rank.begin(); it != rank.end(); it++){
answer.push_back(it->second);
}
return answer;
}
<vector>
는 C++ 표준 라이브러리의 하나로, 동적 배열(dynamic array)을 구현한 컨테이너입니다. <vector>
를 사용하면 크기가 동적으로 조절되는 배열을 쉽게 구현할 수 있습니다.<vector>
를 사용할 수 있습니다.<vector>
는 STL(Standard Template Library)의 일부이며, 다양한 편리한 멤버 함수를 제공합니다. 예를 들어, push_back() 함수를 사용하면 배열의 끝에 원소를 추가할 수 있고, pop_back() 함수를 사용하면 배열의 끝에서 원소를 삭제할 수 있습니다. 또한, at() 함수를 사용하면 범위를 벗어나는 인덱스로의 접근을 방지할 수 있습니다.