C++/programmers 코딩테스트(level 1) C++

[C/C++] programmers Level 1 달리기 경주 - 참고

CE : 하랑 2023. 11. 27. 17:55

 

 

 

 

 

코드

#include <string>
#include <vector>
#include <unordered_map> // 해시
#include <algorithm> // swap : 두 변수의 값을 교환

using namespace std;

vector<string> solution(vector<string> players, vector<string> callings) {
    vector<string> answer=players;
    
    unordered_map<string, int> hashmap; // string : 선수 이름, int : 순위 (인덱스)
    
    for(int i=0;i<answer.size();i++){
        hashmap[answer[i]]=i; // 선수 순위 저장
    }
    
    for(int i=0;i<callings.size();i++){
        int idx=hashmap[callings[i]]; // 해설진이 부른 순위(인덱스) 
        hashmap[answer[idx-1]]++; // 현재 순위에서 해설진이 부른 선수의 앞의 순위인 선수의 등수 하락 ex) 3위 -> 4위
        hashmap[callings[i]]--; // 해설진이 부른 선수 등수 상승 ex) -> 4위 -> 3위
        swap(answer[idx-1], answer[idx]); // answer 값에서 해설진이 부른 선수와 앞 순위 선수 등수 변경
    }
    
    return answer;
}