달리기 경주 중인 선수들의 이름을 현재 등수 기준으로 정렬한 배열이 주어집니다. 또, 앞지르기가 발생할 때마다 앞지르기에 성공한 선수의 이름을 담은 배열이 주어집니다. 이 때 최종 등수 기준 배열을 반환하는 문제입니다.
먼저 dictionary에 선수별 현재 등수를 담아두고, 앞지를 때마다 조정해주었습니다. 이 때 앞지른 선수의 등수를 파악하기 위해 players
array를 그대로 써도 되지만 편의를 위해 dictionary를 하나 더 만들어서 key, value를 바꿔 넣었습니다.
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = new String[players.length];
HashMap<String, Integer> map1 = new HashMap<>();
HashMap<Integer, String> map2 = new HashMap<>();
for (int i = 0; i < players.length; i++) {
map1.put(players[i], i);
map2.put(i, players[i]);
}
for (String calling : callings) {
int newRank = map1.get(calling) - 1;
String preOwner = map2.get(newRank);
map1.put(calling, newRank);
map1.put(preOwner, newRank + 1);
map2.put(newRank, calling);
map2.put(newRank + 1, preOwner);
}
for (int i = 0; i < players.length; i++) {
answer[i] = map2.get(i);
}
return answer;
}
}