해시 맵을 사용하는데 현재 부르는 참가자가 몇번째에 랭크되어있는지 확인하는 데 사용한다. String 배열로만 사용시 indexof로 사용하면 너무 늦기 때문에 해시맵을 사용하는 것이다.
HashMap<Stirng, Integer> hm = new HashNap<>();
for (int i = 0; i < players.length; i++) {
hm.put(players[i], i);
}
그리고 현재 부른 참가자의 이전에 달리고 있는 사람의 정보가 필요한데, 이것은 players[현재참가자의 랭크 - 1] 을 하면 나오는 정보이다.
for (int i = 0 ; i < calling.length; i++) {
// 불려진 참가자의 랭크
int rank = hm.get(calling[i]);
// 불려진 참가자 이전의 사람이 랭크가 뒤쳐짐
hm.put(players[rank - 1], rank);
players[rank] = players[rank - 1];
// 불려진 참가자의 랭크를 한단계 상승
hm.put(calling[i], rank - 1);
players[rank - 1] = calling[i];
}
그리고 현재 불려진 참가자와의 랭크과 스왑을 하면 된다. 스왑을 할때 해시맵도 같이 수정을 해준다
문제만 차근차근 읽으면 풀 수 있을것이다. 제발제발