문제출처


import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        HashMap<String,Integer> map = new HashMap<>();

        for(int i = 0; i < players.length; i++){
            map.put(players[i],i);
        }
        
        for(String player : callings){
            int rank = map.get(player);
            
            String temp = players[rank-1];
            
            players[rank-1] = player;
            players[rank] = temp;
            
            map.put(player, rank-1);
            map.put(temp, rank);
        }
        
        return players;
    }
}

접근방법

해설진들이 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부른다는 문제 내용을 보고 map의 get을 떠올렸다.

players배열에 선수들의 이름이 등수 순서대로 담겨있다고 했기 때문에 key에는 선수이름, value에는 배열의 인덱스값을 저장해 준다.

해설진이 부른 이름을 담은 문자열 배열 callings를 순회하며 rank변수 에는 해설진이 부른 선수의 현재 등수를 저장한다.

temp변수에는 해설진이 부른 선수의 바로 앞의 선수이름을 저장한다.

배열에서 rank를 활용하여 추월한 선수의 이름과 추월당한 선수의 이름을 순위에 맞게 저장한다.

map에도 똑같이 변경해준다.

마지막으로 players 배열을 반환하면 끝이다.