Argorithm

[Programmers]LV.1 달리기 경주

빙응이 2023. 11. 28. 20:14


📝풀이

해당 문제는 일반 배열로 비교하면 안된다. 

그 이유는 

Players 최대가 50,000 Callings의 최대가 1,000,000이므로 

최대 50,000 x 1,000,000번이 돌아간다. 

이런 반복횟수가 나올 수 있는 배열을 사용하면 당연히 시간 초과가 나오게 된다. 

 

그렇기에 빠른 검색이 가능한 자료 구조를 사용해야한다. 

일반적으로 빠른 검색은 "HashMap"을 사용하면 된다. 

 

import java.util.HashMap;


class Solution {
    public String[] solution(String[] players, String[] callings) {
        HashMap<String, Integer> map = new HashMap<>(); //[A] 해시맵 선언
        for(int i =0; i < players.length;i++) //[B] 해시맵 초기화
            map.put(players[i],i); 
            
        for(String call:callings){
            int rank = map.get(call); //[C] 찾는 선수의 순위를 가져온다.
            
            String tmp = call; //[D] player배열 기준 찾은 선수가 앞 선수를 추월 
            players[rank] = players[rank-1];
            players[rank-1]= tmp;

            map.put(call, rank-1); //[E] 해시맵도 추월한 것을 갱신한다.
            map.put(players[rank], rank);
        }  
        return players;
    }
}